// $ANTLR 3.0.1 /home/arthit/projects/siit-commons/src/TCC.g 2008-07-13 15:09:23

package net.siit.ling;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;


import org.antlr.runtime.tree.*;

/**
 * Thai Character Cluster (TCC)
 */
public class TCCParser extends Parser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "CLUSTER_TCC", "CLUSTER_ATCC", "CLUSTER_BTCC", "CLUSTER_WS", "CLUSTER_SYMBOL", "CLUSTER_TDIGITS", "CLUSTER_ADIGITS", "CLUSTER_OTHERS", "ADIGIT", "TDIGIT", "SYMBOL", "HSPACE", "VSPACE", "WS", "SPACE", "TAB", "NEWLINE", "FEED", "FORMFEED", "NONTHAI", "TONE", "A", "HANAKAT", "AA", "AM", "I", "II", "UE", "UEE", "U", "UU", "E", "AE", "O", "MUAN", "MALAI", "LAKKHANGYAO", "RU", "LU", "PAIYANNOI", "PHINTHU", "YAMOK", "TAIKHU", "THANTHAKHAT", "NIKHAHIT", "YAMAKKAN", "FONGMAN", "ANGKHANKHU", "KHOMUT", "KAI", "KHAI", "KHUAT", "KHWAI", "KHON", "RAKHANG", "NGU", "CHAN", "CHING", "CHANG", "SO", "CHOE", "YING", "CHADA", "PATAK", "THAN", "NANGMONTHO", "PHUTHAO", "NEN", "DEK", "TAO", "THUNG", "THAHAN", "THONG", "NU", "BAIMAI", "PLA", "PHUNG", "FA", "PHAN", "FAN", "SAMPHAO", "MA", "YAK", "RUA", "LING", "WAEN", "SALA", "RUSI", "SUA", "HIP", "CHULA", "ANG", "NOKHUK"
    };
    public static final int LU=42;
    public static final int ADIGIT=12;
    public static final int FAN=83;
    public static final int CHAN=60;
    public static final int CHADA=66;
    public static final int YAMAKKAN=49;
    public static final int CLUSTER_OTHERS=11;
    public static final int FONGMAN=50;
    public static final int EOF=-1;
    public static final int HANAKAT=26;
    public static final int PHUNG=80;
    public static final int MA=85;
    public static final int UU=34;
    public static final int FA=81;
    public static final int THAN=68;
    public static final int HIP=93;
    public static final int TAO=73;
    public static final int SAMPHAO=84;
    public static final int NONTHAI=23;
    public static final int LAKKHANGYAO=40;
    public static final int UE=31;
    public static final int THONG=76;
    public static final int NGU=59;
    public static final int NANGMONTHO=69;
    public static final int CLUSTER_TCC=4;
    public static final int NIKHAHIT=48;
    public static final int THUNG=74;
    public static final int MUAN=38;
    public static final int E=35;
    public static final int CHULA=94;
    public static final int A=25;
    public static final int SYMBOL=14;
    public static final int NU=77;
    public static final int BAIMAI=78;
    public static final int O=37;
    public static final int CLUSTER_WS=7;
    public static final int KHON=57;
    public static final int PAIYANNOI=43;
    public static final int I=29;
    public static final int CLUSTER_BTCC=6;
    public static final int U=33;
    public static final int YING=65;
    public static final int UEE=32;
    public static final int PHUTHAO=70;
    public static final int FORMFEED=22;
    public static final int WS=17;
    public static final int CLUSTER_SYMBOL=8;
    public static final int RUSI=91;
    public static final int DEK=72;
    public static final int CLUSTER_ATCC=5;
    public static final int ANG=95;
    public static final int SPACE=18;
    public static final int CHING=61;
    public static final int YAK=86;
    public static final int II=30;
    public static final int SUA=92;
    public static final int AA=27;
    public static final int YAMOK=45;
    public static final int AE=36;
    public static final int PHINTHU=44;
    public static final int ANGKHANKHU=51;
    public static final int RAKHANG=58;
    public static final int AM=28;
    public static final int CHOE=64;
    public static final int NOKHUK=96;
    public static final int WAEN=89;
    public static final int TAB=19;
    public static final int THANTHAKHAT=47;
    public static final int RUA=87;
    public static final int FEED=21;
    public static final int VSPACE=16;
    public static final int LING=88;
    public static final int CLUSTER_ADIGITS=10;
    public static final int TDIGIT=13;
    public static final int HSPACE=15;
    public static final int KHOMUT=52;
    public static final int PLA=79;
    public static final int PATAK=67;
    public static final int NEWLINE=20;
    public static final int NEN=71;
    public static final int KHAI=54;
    public static final int KHUAT=55;
    public static final int SO=63;
    public static final int THAHAN=75;
    public static final int TONE=24;
    public static final int CHANG=62;
    public static final int RU=41;
    public static final int CLUSTER_TDIGITS=9;
    public static final int TAIKHU=46;
    public static final int KAI=53;
    public static final int KHWAI=56;
    public static final int PHAN=82;
    public static final int SALA=90;
    public static final int MALAI=39;

        public TCCParser(TokenStream input) {
            super(input);
        }
        
    protected TreeAdaptor adaptor = new CommonTreeAdaptor();

    public void setTreeAdaptor(TreeAdaptor adaptor) {
        this.adaptor = adaptor;
    }
    public TreeAdaptor getTreeAdaptor() {
        return adaptor;
    }

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "/home/arthit/projects/siit-commons/src/TCC.g"; }


    ArrayList list = new ArrayList();


    public static class s_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start s
    // /home/arthit/projects/siit-commons/src/TCC.g:235:1: s : ( tcc | abtcc | others | symbols | adigits | tdigits | whitespaces )* ;
    public final s_return s() throws RecognitionException {
        s_return retval = new s_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        tcc_return tcc1 = null;

        abtcc_return abtcc2 = null;

        others_return others3 = null;

        symbols_return symbols4 = null;

        adigits_return adigits5 = null;

        tdigits_return tdigits6 = null;

        whitespaces_return whitespaces7 = null;



        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:235:3: ( ( tcc | abtcc | others | symbols | adigits | tdigits | whitespaces )* )
            // /home/arthit/projects/siit-commons/src/TCC.g:235:5: ( tcc | abtcc | others | symbols | adigits | tdigits | whitespaces )*
            {
            root_0 = (CommonTree)adaptor.nil();

            // /home/arthit/projects/siit-commons/src/TCC.g:235:5: ( tcc | abtcc | others | symbols | adigits | tdigits | whitespaces )*
            loop1:
            do {
                int alt1=8;
                switch ( input.LA(1) ) {
                case RU:
                case LU:
                case PAIYANNOI:
                case YAMOK:
                case FONGMAN:
                case ANGKHANKHU:
                case KHOMUT:
                case KAI:
                case KHAI:
                case KHUAT:
                case KHWAI:
                case KHON:
                case RAKHANG:
                case NGU:
                case CHAN:
                case CHING:
                case CHANG:
                case SO:
                case CHOE:
                case YING:
                case CHADA:
                case PATAK:
                case THAN:
                case NANGMONTHO:
                case PHUTHAO:
                case NEN:
                case DEK:
                case TAO:
                case THUNG:
                case THAHAN:
                case THONG:
                case NU:
                case BAIMAI:
                case PLA:
                case PHUNG:
                case FA:
                case PHAN:
                case FAN:
                case SAMPHAO:
                case MA:
                case YAK:
                case RUA:
                case LING:
                case WAEN:
                case SALA:
                case RUSI:
                case SUA:
                case HIP:
                case CHULA:
                case ANG:
                case NOKHUK:
                    {
                    alt1=1;
                    }
                    break;
                case E:
                    {
                    int LA1_3 = input.LA(2);

                    if ( ((LA1_3>=KAI && LA1_3<=NOKHUK)) ) {
                        alt1=1;
                    }
                    else if ( (LA1_3==EOF||(LA1_3>=ADIGIT && LA1_3<=SYMBOL)||LA1_3==WS||LA1_3==NONTHAI||(LA1_3>=A && LA1_3<=KHOMUT)) ) {
                        alt1=2;
                    }


                    }
                    break;
                case AE:
                    {
                    int LA1_4 = input.LA(2);

                    if ( ((LA1_4>=KAI && LA1_4<=NOKHUK)) ) {
                        alt1=1;
                    }
                    else if ( (LA1_4==EOF||(LA1_4>=ADIGIT && LA1_4<=SYMBOL)||LA1_4==WS||LA1_4==NONTHAI||(LA1_4>=A && LA1_4<=KHOMUT)) ) {
                        alt1=2;
                    }


                    }
                    break;
                case O:
                    {
                    int LA1_5 = input.LA(2);

                    if ( ((LA1_5>=KAI && LA1_5<=NOKHUK)) ) {
                        alt1=1;
                    }
                    else if ( (LA1_5==EOF||(LA1_5>=ADIGIT && LA1_5<=SYMBOL)||LA1_5==WS||LA1_5==NONTHAI||(LA1_5>=A && LA1_5<=KHOMUT)) ) {
                        alt1=2;
                    }


                    }
                    break;
                case MUAN:
                case MALAI:
                    {
                    int LA1_6 = input.LA(2);

                    if ( ((LA1_6>=KAI && LA1_6<=NOKHUK)) ) {
                        alt1=1;
                    }
                    else if ( (LA1_6==EOF||(LA1_6>=ADIGIT && LA1_6<=SYMBOL)||LA1_6==WS||LA1_6==NONTHAI||(LA1_6>=A && LA1_6<=KHOMUT)) ) {
                        alt1=2;
                    }


                    }
                    break;
                case A:
                case HANAKAT:
                case AA:
                case AM:
                case I:
                case II:
                case UE:
                case UEE:
                case U:
                case UU:
                case LAKKHANGYAO:
                case PHINTHU:
                case TAIKHU:
                case THANTHAKHAT:
                case NIKHAHIT:
                case YAMAKKAN:
                    {
                    alt1=2;
                    }
                    break;
                case NONTHAI:
                    {
                    alt1=3;
                    }
                    break;
                case SYMBOL:
                    {
                    alt1=4;
                    }
                    break;
                case ADIGIT:
                    {
                    alt1=5;
                    }
                    break;
                case TDIGIT:
                    {
                    alt1=6;
                    }
                    break;
                case WS:
                    {
                    alt1=7;
                    }
                    break;

                }

                switch (alt1) {
            	case 1 :
            	    // /home/arthit/projects/siit-commons/src/TCC.g:235:7: tcc
            	    {
            	    pushFollow(FOLLOW_tcc_in_s1048);
            	    tcc1=tcc();
            	    _fsp--;

            	    adaptor.addChild(root_0, tcc1.getTree());

            	    }
            	    break;
            	case 2 :
            	    // /home/arthit/projects/siit-commons/src/TCC.g:235:13: abtcc
            	    {
            	    pushFollow(FOLLOW_abtcc_in_s1052);
            	    abtcc2=abtcc();
            	    _fsp--;

            	    adaptor.addChild(root_0, abtcc2.getTree());

            	    }
            	    break;
            	case 3 :
            	    // /home/arthit/projects/siit-commons/src/TCC.g:235:21: others
            	    {
            	    pushFollow(FOLLOW_others_in_s1056);
            	    others3=others();
            	    _fsp--;

            	    adaptor.addChild(root_0, others3.getTree());

            	    }
            	    break;
            	case 4 :
            	    // /home/arthit/projects/siit-commons/src/TCC.g:235:30: symbols
            	    {
            	    pushFollow(FOLLOW_symbols_in_s1060);
            	    symbols4=symbols();
            	    _fsp--;

            	    adaptor.addChild(root_0, symbols4.getTree());

            	    }
            	    break;
            	case 5 :
            	    // /home/arthit/projects/siit-commons/src/TCC.g:235:40: adigits
            	    {
            	    pushFollow(FOLLOW_adigits_in_s1064);
            	    adigits5=adigits();
            	    _fsp--;

            	    adaptor.addChild(root_0, adigits5.getTree());

            	    }
            	    break;
            	case 6 :
            	    // /home/arthit/projects/siit-commons/src/TCC.g:235:50: tdigits
            	    {
            	    pushFollow(FOLLOW_tdigits_in_s1068);
            	    tdigits6=tdigits();
            	    _fsp--;

            	    adaptor.addChild(root_0, tdigits6.getTree());

            	    }
            	    break;
            	case 7 :
            	    // /home/arthit/projects/siit-commons/src/TCC.g:235:60: whitespaces
            	    {
            	    pushFollow(FOLLOW_whitespaces_in_s1072);
            	    whitespaces7=whitespaces();
            	    _fsp--;

            	    adaptor.addChild(root_0, whitespaces7.getTree());

            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end s

    public static class others_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start others
    // /home/arthit/projects/siit-commons/src/TCC.g:238:1: others : ( NONTHAI )+ -> ^( CLUSTER_OTHERS ( NONTHAI )+ ) ;
    public final others_return others() throws RecognitionException {
        others_return retval = new others_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token NONTHAI8=null;

        CommonTree NONTHAI8_tree=null;
        RewriteRuleTokenStream stream_NONTHAI=new RewriteRuleTokenStream(adaptor,"token NONTHAI");

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:238:8: ( ( NONTHAI )+ -> ^( CLUSTER_OTHERS ( NONTHAI )+ ) )
            // /home/arthit/projects/siit-commons/src/TCC.g:238:10: ( NONTHAI )+
            {
            // /home/arthit/projects/siit-commons/src/TCC.g:238:10: ( NONTHAI )+
            int cnt2=0;
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( (LA2_0==NONTHAI) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // /home/arthit/projects/siit-commons/src/TCC.g:238:10: NONTHAI
            	    {
            	    NONTHAI8=(Token)input.LT(1);
            	    match(input,NONTHAI,FOLLOW_NONTHAI_in_others1085); 
            	    stream_NONTHAI.add(NONTHAI8);


            	    }
            	    break;

            	default :
            	    if ( cnt2 >= 1 ) break loop2;
                        EarlyExitException eee =
                            new EarlyExitException(2, input);
                        throw eee;
                }
                cnt2++;
            } while (true);


            // AST REWRITE
            // elements: NONTHAI
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 238:19: -> ^( CLUSTER_OTHERS ( NONTHAI )+ )
            {
                // /home/arthit/projects/siit-commons/src/TCC.g:238:22: ^( CLUSTER_OTHERS ( NONTHAI )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_OTHERS, "CLUSTER_OTHERS"), root_1);

                if ( !(stream_NONTHAI.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_NONTHAI.hasNext() ) {
                    adaptor.addChild(root_1, stream_NONTHAI.next());

                }
                stream_NONTHAI.reset();

                adaptor.addChild(root_0, root_1);
                }

            }



            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end others

    public static class symbols_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start symbols
    // /home/arthit/projects/siit-commons/src/TCC.g:240:1: symbols : SYMBOL -> ^( CLUSTER_SYMBOL SYMBOL ) ;
    public final symbols_return symbols() throws RecognitionException {
        symbols_return retval = new symbols_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token SYMBOL9=null;

        CommonTree SYMBOL9_tree=null;
        RewriteRuleTokenStream stream_SYMBOL=new RewriteRuleTokenStream(adaptor,"token SYMBOL");

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:240:9: ( SYMBOL -> ^( CLUSTER_SYMBOL SYMBOL ) )
            // /home/arthit/projects/siit-commons/src/TCC.g:240:11: SYMBOL
            {
            SYMBOL9=(Token)input.LT(1);
            match(input,SYMBOL,FOLLOW_SYMBOL_in_symbols1104); 
            stream_SYMBOL.add(SYMBOL9);


            // AST REWRITE
            // elements: SYMBOL
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 240:18: -> ^( CLUSTER_SYMBOL SYMBOL )
            {
                // /home/arthit/projects/siit-commons/src/TCC.g:240:21: ^( CLUSTER_SYMBOL SYMBOL )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_SYMBOL, "CLUSTER_SYMBOL"), root_1);

                adaptor.addChild(root_1, stream_SYMBOL.next());

                adaptor.addChild(root_0, root_1);
                }

            }



            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end symbols

    public static class adigits_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start adigits
    // /home/arthit/projects/siit-commons/src/TCC.g:242:1: adigits : ( ADIGIT )+ -> ^( CLUSTER_ADIGITS ( ADIGIT )+ ) ;
    public final adigits_return adigits() throws RecognitionException {
        adigits_return retval = new adigits_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token ADIGIT10=null;

        CommonTree ADIGIT10_tree=null;
        RewriteRuleTokenStream stream_ADIGIT=new RewriteRuleTokenStream(adaptor,"token ADIGIT");

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:242:9: ( ( ADIGIT )+ -> ^( CLUSTER_ADIGITS ( ADIGIT )+ ) )
            // /home/arthit/projects/siit-commons/src/TCC.g:242:11: ( ADIGIT )+
            {
            // /home/arthit/projects/siit-commons/src/TCC.g:242:11: ( ADIGIT )+
            int cnt3=0;
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==ADIGIT) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // /home/arthit/projects/siit-commons/src/TCC.g:242:11: ADIGIT
            	    {
            	    ADIGIT10=(Token)input.LT(1);
            	    match(input,ADIGIT,FOLLOW_ADIGIT_in_adigits1121); 
            	    stream_ADIGIT.add(ADIGIT10);


            	    }
            	    break;

            	default :
            	    if ( cnt3 >= 1 ) break loop3;
                        EarlyExitException eee =
                            new EarlyExitException(3, input);
                        throw eee;
                }
                cnt3++;
            } while (true);


            // AST REWRITE
            // elements: ADIGIT
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 242:19: -> ^( CLUSTER_ADIGITS ( ADIGIT )+ )
            {
                // /home/arthit/projects/siit-commons/src/TCC.g:242:22: ^( CLUSTER_ADIGITS ( ADIGIT )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_ADIGITS, "CLUSTER_ADIGITS"), root_1);

                if ( !(stream_ADIGIT.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_ADIGIT.hasNext() ) {
                    adaptor.addChild(root_1, stream_ADIGIT.next());

                }
                stream_ADIGIT.reset();

                adaptor.addChild(root_0, root_1);
                }

            }



            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end adigits

    public static class tdigits_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start tdigits
    // /home/arthit/projects/siit-commons/src/TCC.g:244:1: tdigits : ( TDIGIT )+ -> ^( CLUSTER_TDIGITS ( TDIGIT )+ ) ;
    public final tdigits_return tdigits() throws RecognitionException {
        tdigits_return retval = new tdigits_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token TDIGIT11=null;

        CommonTree TDIGIT11_tree=null;
        RewriteRuleTokenStream stream_TDIGIT=new RewriteRuleTokenStream(adaptor,"token TDIGIT");

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:244:9: ( ( TDIGIT )+ -> ^( CLUSTER_TDIGITS ( TDIGIT )+ ) )
            // /home/arthit/projects/siit-commons/src/TCC.g:244:11: ( TDIGIT )+
            {
            // /home/arthit/projects/siit-commons/src/TCC.g:244:11: ( TDIGIT )+
            int cnt4=0;
            loop4:
            do {
                int alt4=2;
                int LA4_0 = input.LA(1);

                if ( (LA4_0==TDIGIT) ) {
                    alt4=1;
                }


                switch (alt4) {
            	case 1 :
            	    // /home/arthit/projects/siit-commons/src/TCC.g:244:11: TDIGIT
            	    {
            	    TDIGIT11=(Token)input.LT(1);
            	    match(input,TDIGIT,FOLLOW_TDIGIT_in_tdigits1140); 
            	    stream_TDIGIT.add(TDIGIT11);


            	    }
            	    break;

            	default :
            	    if ( cnt4 >= 1 ) break loop4;
                        EarlyExitException eee =
                            new EarlyExitException(4, input);
                        throw eee;
                }
                cnt4++;
            } while (true);


            // AST REWRITE
            // elements: TDIGIT
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 244:19: -> ^( CLUSTER_TDIGITS ( TDIGIT )+ )
            {
                // /home/arthit/projects/siit-commons/src/TCC.g:244:22: ^( CLUSTER_TDIGITS ( TDIGIT )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TDIGITS, "CLUSTER_TDIGITS"), root_1);

                if ( !(stream_TDIGIT.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_TDIGIT.hasNext() ) {
                    adaptor.addChild(root_1, stream_TDIGIT.next());

                }
                stream_TDIGIT.reset();

                adaptor.addChild(root_0, root_1);
                }

            }



            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end tdigits

    public static class whitespaces_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start whitespaces
    // /home/arthit/projects/siit-commons/src/TCC.g:246:1: whitespaces : ( WS )+ -> ^( CLUSTER_WS ( WS )+ ) ;
    public final whitespaces_return whitespaces() throws RecognitionException {
        whitespaces_return retval = new whitespaces_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token WS12=null;

        CommonTree WS12_tree=null;
        RewriteRuleTokenStream stream_WS=new RewriteRuleTokenStream(adaptor,"token WS");

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:246:13: ( ( WS )+ -> ^( CLUSTER_WS ( WS )+ ) )
            // /home/arthit/projects/siit-commons/src/TCC.g:246:15: ( WS )+
            {
            // /home/arthit/projects/siit-commons/src/TCC.g:246:15: ( WS )+
            int cnt5=0;
            loop5:
            do {
                int alt5=2;
                int LA5_0 = input.LA(1);

                if ( (LA5_0==WS) ) {
                    alt5=1;
                }


                switch (alt5) {
            	case 1 :
            	    // /home/arthit/projects/siit-commons/src/TCC.g:246:15: WS
            	    {
            	    WS12=(Token)input.LT(1);
            	    match(input,WS,FOLLOW_WS_in_whitespaces1159); 
            	    stream_WS.add(WS12);


            	    }
            	    break;

            	default :
            	    if ( cnt5 >= 1 ) break loop5;
                        EarlyExitException eee =
                            new EarlyExitException(5, input);
                        throw eee;
                }
                cnt5++;
            } while (true);


            // AST REWRITE
            // elements: WS
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 246:19: -> ^( CLUSTER_WS ( WS )+ )
            {
                // /home/arthit/projects/siit-commons/src/TCC.g:246:22: ^( CLUSTER_WS ( WS )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_WS, "CLUSTER_WS"), root_1);

                if ( !(stream_WS.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_WS.hasNext() ) {
                    adaptor.addChild(root_1, stream_WS.next());

                }
                stream_WS.reset();

                adaptor.addChild(root_0, root_1);
                }

            }



            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end whitespaces

    public static class tcc_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start tcc
    // /home/arthit/projects/siit-commons/src/TCC.g:252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );
    public final tcc_return tcc() throws RecognitionException {
        tcc_return retval = new tcc_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token TONE18=null;
        Token TAIKHU22=null;
        Token TONE26=null;
        Token E28=null;
        Token I30=null;
        Token E32=null;
        Token II34=null;
        Token E36=null;
        Token UEE38=null;
        Token E40=null;
        Token AE43=null;
        Token O46=null;
        Token TONE51=null;
        c_return c13 = null;

        abv_return abv14 = null;

        kill_return kill15 = null;

        c_return c16 = null;

        abv_return abv17 = null;

        c_return c19 = null;

        sv_return sv20 = null;

        c_return c21 = null;

        c_return c23 = null;

        hanakat_c_return hanakat_c24 = null;

        c_return c25 = null;

        fv_return fv27 = null;

        c_return c29 = null;

        e_i_opt_return e_i_opt31 = null;

        c_return c33 = null;

        e_ii_opt_return e_ii_opt35 = null;

        c_return c37 = null;

        e_uee_opt_return e_uee_opt39 = null;

        c_return c41 = null;

        e_opt_return e_opt42 = null;

        c_return c44 = null;

        ae_opt_return ae_opt45 = null;

        c_return c47 = null;

        o_opt_return o_opt48 = null;

        lv_return lv49 = null;

        c_return c50 = null;

        sv_return sv52 = null;

        tsymbol_return tsymbol53 = null;


        CommonTree TONE18_tree=null;
        CommonTree TAIKHU22_tree=null;
        CommonTree TONE26_tree=null;
        CommonTree E28_tree=null;
        CommonTree I30_tree=null;
        CommonTree E32_tree=null;
        CommonTree II34_tree=null;
        CommonTree E36_tree=null;
        CommonTree UEE38_tree=null;
        CommonTree E40_tree=null;
        CommonTree AE43_tree=null;
        CommonTree O46_tree=null;
        CommonTree TONE51_tree=null;
        RewriteRuleTokenStream stream_II=new RewriteRuleTokenStream(adaptor,"token II");
        RewriteRuleTokenStream stream_TONE=new RewriteRuleTokenStream(adaptor,"token TONE");
        RewriteRuleTokenStream stream_E=new RewriteRuleTokenStream(adaptor,"token E");
        RewriteRuleTokenStream stream_UEE=new RewriteRuleTokenStream(adaptor,"token UEE");
        RewriteRuleTokenStream stream_AE=new RewriteRuleTokenStream(adaptor,"token AE");
        RewriteRuleTokenStream stream_TAIKHU=new RewriteRuleTokenStream(adaptor,"token TAIKHU");
        RewriteRuleTokenStream stream_O=new RewriteRuleTokenStream(adaptor,"token O");
        RewriteRuleTokenStream stream_I=new RewriteRuleTokenStream(adaptor,"token I");
        RewriteRuleSubtreeStream stream_o_opt=new RewriteRuleSubtreeStream(adaptor,"rule o_opt");
        RewriteRuleSubtreeStream stream_fv=new RewriteRuleSubtreeStream(adaptor,"rule fv");
        RewriteRuleSubtreeStream stream_c=new RewriteRuleSubtreeStream(adaptor,"rule c");
        RewriteRuleSubtreeStream stream_hanakat_c=new RewriteRuleSubtreeStream(adaptor,"rule hanakat_c");
        RewriteRuleSubtreeStream stream_e_uee_opt=new RewriteRuleSubtreeStream(adaptor,"rule e_uee_opt");
        RewriteRuleSubtreeStream stream_kill=new RewriteRuleSubtreeStream(adaptor,"rule kill");
        RewriteRuleSubtreeStream stream_lv=new RewriteRuleSubtreeStream(adaptor,"rule lv");
        RewriteRuleSubtreeStream stream_tsymbol=new RewriteRuleSubtreeStream(adaptor,"rule tsymbol");
        RewriteRuleSubtreeStream stream_ae_opt=new RewriteRuleSubtreeStream(adaptor,"rule ae_opt");
        RewriteRuleSubtreeStream stream_e_ii_opt=new RewriteRuleSubtreeStream(adaptor,"rule e_ii_opt");
        RewriteRuleSubtreeStream stream_abv=new RewriteRuleSubtreeStream(adaptor,"rule abv");
        RewriteRuleSubtreeStream stream_e_opt=new RewriteRuleSubtreeStream(adaptor,"rule e_opt");
        RewriteRuleSubtreeStream stream_e_i_opt=new RewriteRuleSubtreeStream(adaptor,"rule e_i_opt");
        RewriteRuleSubtreeStream stream_sv=new RewriteRuleSubtreeStream(adaptor,"rule sv");
        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:252:6: ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) )
            int alt11=15;
            switch ( input.LA(1) ) {
            case KAI:
            case KHAI:
            case KHUAT:
            case KHWAI:
            case KHON:
            case RAKHANG:
            case NGU:
            case CHAN:
            case CHING:
            case CHANG:
            case SO:
            case CHOE:
            case YING:
            case CHADA:
            case PATAK:
            case THAN:
            case NANGMONTHO:
            case PHUTHAO:
            case NEN:
            case DEK:
            case TAO:
            case THUNG:
            case THAHAN:
            case THONG:
            case NU:
            case BAIMAI:
            case PLA:
            case PHUNG:
            case FA:
            case PHAN:
            case FAN:
            case SAMPHAO:
            case MA:
            case YAK:
            case RUA:
            case LING:
            case WAEN:
            case SALA:
            case RUSI:
            case SUA:
            case HIP:
            case CHULA:
            case ANG:
            case NOKHUK:
                {
                switch ( input.LA(2) ) {
                case HANAKAT:
                    {
                    alt11=5;
                    }
                    break;
                case NIKHAHIT:
                    {
                    int LA11_9 = input.LA(3);

                    if ( (LA11_9==EOF||(LA11_9>=ADIGIT && LA11_9<=SYMBOL)||LA11_9==WS||(LA11_9>=NONTHAI && LA11_9<=TAIKHU)||LA11_9==NIKHAHIT||(LA11_9>=FONGMAN && LA11_9<=NOKHUK)) ) {
                        alt11=2;
                    }
                    else if ( (LA11_9==THANTHAKHAT||LA11_9==YAMAKKAN) ) {
                        alt11=1;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 9, input);

                        throw nvae;
                    }
                    }
                    break;
                case THANTHAKHAT:
                case YAMAKKAN:
                    {
                    alt11=1;
                    }
                    break;
                case EOF:
                case ADIGIT:
                case TDIGIT:
                case SYMBOL:
                case WS:
                case NONTHAI:
                case TONE:
                case A:
                case AA:
                case AM:
                case E:
                case AE:
                case O:
                case MUAN:
                case MALAI:
                case LAKKHANGYAO:
                case PAIYANNOI:
                case YAMOK:
                case FONGMAN:
                case ANGKHANKHU:
                case KHOMUT:
                case KAI:
                case KHAI:
                case KHUAT:
                case KHWAI:
                case KHON:
                case RAKHANG:
                case NGU:
                case CHAN:
                case CHING:
                case CHANG:
                case SO:
                case CHOE:
                case YING:
                case CHADA:
                case PATAK:
                case THAN:
                case NANGMONTHO:
                case PHUTHAO:
                case NEN:
                case DEK:
                case TAO:
                case THUNG:
                case THAHAN:
                case THONG:
                case NU:
                case BAIMAI:
                case PLA:
                case PHUNG:
                case FA:
                case PHAN:
                case FAN:
                case SAMPHAO:
                case MA:
                case YAK:
                case RUA:
                case LING:
                case WAEN:
                case SALA:
                case RUSI:
                case SUA:
                case HIP:
                case CHULA:
                case ANG:
                case NOKHUK:
                    {
                    alt11=6;
                    }
                    break;
                case TAIKHU:
                    {
                    int LA11_12 = input.LA(3);

                    if ( (LA11_12==THANTHAKHAT||LA11_12==YAMAKKAN) ) {
                        alt11=1;
                    }
                    else if ( (LA11_12==EOF||(LA11_12>=ADIGIT && LA11_12<=SYMBOL)||LA11_12==WS||(LA11_12>=NONTHAI && LA11_12<=TAIKHU)||LA11_12==NIKHAHIT||(LA11_12>=FONGMAN && LA11_12<=NOKHUK)) ) {
                        alt11=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 12, input);

                        throw nvae;
                    }
                    }
                    break;
                case RU:
                case LU:
                    {
                    alt11=3;
                    }
                    break;
                case I:
                case II:
                case UE:
                case UEE:
                case U:
                case UU:
                case PHINTHU:
                    {
                    int LA11_14 = input.LA(3);

                    if ( (LA11_14==THANTHAKHAT||LA11_14==YAMAKKAN) ) {
                        alt11=1;
                    }
                    else if ( (LA11_14==EOF||(LA11_14>=ADIGIT && LA11_14<=SYMBOL)||LA11_14==WS||(LA11_14>=NONTHAI && LA11_14<=TAIKHU)||LA11_14==NIKHAHIT||(LA11_14>=FONGMAN && LA11_14<=NOKHUK)) ) {
                        alt11=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 14, input);

                        throw nvae;
                    }
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 1, input);

                    throw nvae;
                }

                }
                break;
            case E:
                {
                int LA11_2 = input.LA(2);

                if ( ((LA11_2>=KAI && LA11_2<=NOKHUK)) ) {
                    switch ( input.LA(3) ) {
                    case II:
                        {
                        int LA11_20 = input.LA(4);

                        if ( (LA11_20==EOF||(LA11_20>=ADIGIT && LA11_20<=SYMBOL)||LA11_20==WS||LA11_20==NONTHAI||(LA11_20>=A && LA11_20<=MA)||(LA11_20>=RUA && LA11_20<=NOKHUK)) ) {
                            alt11=13;
                        }
                        else if ( (LA11_20==TONE||LA11_20==YAK) ) {
                            alt11=8;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 20, input);

                            throw nvae;
                        }
                        }
                        break;
                    case TONE:
                        {
                        switch ( input.LA(4) ) {
                        case A:
                            {
                            alt11=10;
                            }
                            break;
                        case AA:
                            {
                            alt11=10;
                            }
                            break;
                        case EOF:
                        case ADIGIT:
                        case TDIGIT:
                        case SYMBOL:
                        case WS:
                        case NONTHAI:
                        case HANAKAT:
                        case AM:
                        case I:
                        case II:
                        case UE:
                        case UEE:
                        case U:
                        case UU:
                        case E:
                        case AE:
                        case O:
                        case MUAN:
                        case MALAI:
                        case LAKKHANGYAO:
                        case RU:
                        case LU:
                        case PAIYANNOI:
                        case PHINTHU:
                        case YAMOK:
                        case TAIKHU:
                        case THANTHAKHAT:
                        case NIKHAHIT:
                        case YAMAKKAN:
                        case FONGMAN:
                        case ANGKHANKHU:
                        case KHOMUT:
                        case KAI:
                        case KHAI:
                        case KHUAT:
                        case KHWAI:
                        case KHON:
                        case RAKHANG:
                        case NGU:
                        case CHAN:
                        case CHING:
                        case CHANG:
                        case SO:
                        case CHOE:
                        case YING:
                        case CHADA:
                        case PATAK:
                        case THAN:
                        case NANGMONTHO:
                        case PHUTHAO:
                        case NEN:
                        case DEK:
                        case TAO:
                        case THUNG:
                        case THAHAN:
                        case THONG:
                        case NU:
                        case BAIMAI:
                        case PLA:
                        case PHUNG:
                        case FA:
                        case PHAN:
                        case FAN:
                        case SAMPHAO:
                        case MA:
                        case YAK:
                        case RUA:
                        case LING:
                        case WAEN:
                        case SALA:
                        case RUSI:
                        case SUA:
                        case HIP:
                        case CHULA:
                        case ANG:
                        case NOKHUK:
                            {
                            alt11=13;
                            }
                            break;
                        default:
                            NoViableAltException nvae =
                                new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 21, input);

                            throw nvae;
                        }

                        }
                        break;
                    case EOF:
                    case ADIGIT:
                    case TDIGIT:
                    case SYMBOL:
                    case WS:
                    case NONTHAI:
                    case HANAKAT:
                    case AM:
                    case UE:
                    case U:
                    case UU:
                    case E:
                    case AE:
                    case O:
                    case MUAN:
                    case MALAI:
                    case LAKKHANGYAO:
                    case RU:
                    case LU:
                    case PAIYANNOI:
                    case PHINTHU:
                    case YAMOK:
                    case THANTHAKHAT:
                    case NIKHAHIT:
                    case YAMAKKAN:
                    case FONGMAN:
                    case ANGKHANKHU:
                    case KHOMUT:
                        {
                        alt11=13;
                        }
                        break;
                    case KAI:
                    case KHAI:
                    case KHUAT:
                    case KHWAI:
                    case KHON:
                    case RAKHANG:
                    case NGU:
                    case CHAN:
                    case CHING:
                    case CHANG:
                    case SO:
                    case CHOE:
                    case YING:
                    case CHADA:
                    case PATAK:
                    case THAN:
                    case NANGMONTHO:
                    case PHUTHAO:
                    case NEN:
                    case DEK:
                    case TAO:
                    case THUNG:
                    case THAHAN:
                    case THONG:
                    case NU:
                    case BAIMAI:
                    case PLA:
                    case PHUNG:
                    case FA:
                    case PHAN:
                    case FAN:
                    case SAMPHAO:
                    case MA:
                    case YAK:
                    case RUA:
                    case LING:
                    case WAEN:
                    case SALA:
                    case RUSI:
                    case SUA:
                    case HIP:
                    case CHULA:
                    case ANG:
                    case NOKHUK:
                        {
                        switch ( input.LA(4) ) {
                        case EOF:
                        case ADIGIT:
                        case TDIGIT:
                        case SYMBOL:
                        case WS:
                        case NONTHAI:
                        case A:
                        case HANAKAT:
                        case AM:
                        case I:
                        case II:
                        case UE:
                        case UEE:
                        case U:
                        case UU:
                        case E:
                        case AE:
                        case O:
                        case MUAN:
                        case MALAI:
                        case LAKKHANGYAO:
                        case RU:
                        case LU:
                        case PAIYANNOI:
                        case PHINTHU:
                        case YAMOK:
                        case TAIKHU:
                        case THANTHAKHAT:
                        case NIKHAHIT:
                        case YAMAKKAN:
                        case FONGMAN:
                        case ANGKHANKHU:
                        case KHOMUT:
                        case KAI:
                        case KHAI:
                        case KHUAT:
                        case KHWAI:
                        case KHON:
                        case RAKHANG:
                        case NGU:
                        case CHAN:
                        case CHING:
                        case CHANG:
                        case SO:
                        case CHOE:
                        case YING:
                        case CHADA:
                        case PATAK:
                        case THAN:
                        case NANGMONTHO:
                        case PHUTHAO:
                        case NEN:
                        case DEK:
                        case TAO:
                        case THUNG:
                        case THAHAN:
                        case THONG:
                        case NU:
                        case BAIMAI:
                        case PLA:
                        case PHUNG:
                        case FA:
                        case PHAN:
                        case FAN:
                        case SAMPHAO:
                        case MA:
                        case YAK:
                        case RUA:
                        case LING:
                        case WAEN:
                        case SALA:
                        case RUSI:
                        case SUA:
                        case HIP:
                        case CHULA:
                        case ANG:
                        case NOKHUK:
                            {
                            alt11=13;
                            }
                            break;
                        case TONE:
                            {
                            int LA11_34 = input.LA(5);

                            if ( (LA11_34==EOF||(LA11_34>=ADIGIT && LA11_34<=SYMBOL)||LA11_34==WS||LA11_34==NONTHAI||(LA11_34>=A && LA11_34<=HANAKAT)||(LA11_34>=AM && LA11_34<=NOKHUK)) ) {
                                alt11=13;
                            }
                            else if ( (LA11_34==AA) ) {
                                int LA11_35 = input.LA(6);

                                if ( (LA11_35==A) ) {
                                    alt11=10;
                                }
                                else if ( (LA11_35==EOF||(LA11_35>=ADIGIT && LA11_35<=SYMBOL)||LA11_35==WS||LA11_35==NONTHAI||(LA11_35>=HANAKAT && LA11_35<=NOKHUK)) ) {
                                    alt11=13;
                                }
                                else {
                                    NoViableAltException nvae =
                                        new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 35, input);

                                    throw nvae;
                                }
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 34, input);

                                throw nvae;
                            }
                            }
                            break;
                        case AA:
                            {
                            int LA11_35 = input.LA(5);

                            if ( (LA11_35==A) ) {
                                alt11=10;
                            }
                            else if ( (LA11_35==EOF||(LA11_35>=ADIGIT && LA11_35<=SYMBOL)||LA11_35==WS||LA11_35==NONTHAI||(LA11_35>=HANAKAT && LA11_35<=NOKHUK)) ) {
                                alt11=13;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 35, input);

                                throw nvae;
                            }
                            }
                            break;
                        default:
                            NoViableAltException nvae =
                                new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 22, input);

                            throw nvae;
                        }

                        }
                        break;
                    case A:
                        {
                        alt11=10;
                        }
                        break;
                    case AA:
                        {
                        alt11=10;
                        }
                        break;
                    case TAIKHU:
                        {
                        int LA11_25 = input.LA(4);

                        if ( (LA11_25==EOF||(LA11_25>=ADIGIT && LA11_25<=SYMBOL)||LA11_25==WS||LA11_25==NONTHAI||(LA11_25>=A && LA11_25<=KHOMUT)) ) {
                            alt11=13;
                        }
                        else if ( ((LA11_25>=KAI && LA11_25<=NOKHUK)) ) {
                            alt11=10;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 25, input);

                            throw nvae;
                        }
                        }
                        break;
                    case UEE:
                        {
                        switch ( input.LA(4) ) {
                        case TONE:
                            {
                            alt11=9;
                            }
                            break;
                        case ANG:
                            {
                            alt11=9;
                            }
                            break;
                        case EOF:
                        case ADIGIT:
                        case TDIGIT:
                        case SYMBOL:
                        case WS:
                        case NONTHAI:
                        case A:
                        case HANAKAT:
                        case AA:
                        case AM:
                        case I:
                        case II:
                        case UE:
                        case UEE:
                        case U:
                        case UU:
                        case E:
                        case AE:
                        case O:
                        case MUAN:
                        case MALAI:
                        case LAKKHANGYAO:
                        case RU:
                        case LU:
                        case PAIYANNOI:
                        case PHINTHU:
                        case YAMOK:
                        case TAIKHU:
                        case THANTHAKHAT:
                        case NIKHAHIT:
                        case YAMAKKAN:
                        case FONGMAN:
                        case ANGKHANKHU:
                        case KHOMUT:
                        case KAI:
                        case KHAI:
                        case KHUAT:
                        case KHWAI:
                        case KHON:
                        case RAKHANG:
                        case NGU:
                        case CHAN:
                        case CHING:
                        case CHANG:
                        case SO:
                        case CHOE:
                        case YING:
                        case CHADA:
                        case PATAK:
                        case THAN:
                        case NANGMONTHO:
                        case PHUTHAO:
                        case NEN:
                        case DEK:
                        case TAO:
                        case THUNG:
                        case THAHAN:
                        case THONG:
                        case NU:
                        case BAIMAI:
                        case PLA:
                        case PHUNG:
                        case FA:
                        case PHAN:
                        case FAN:
                        case SAMPHAO:
                        case MA:
                        case YAK:
                        case RUA:
                        case LING:
                        case WAEN:
                        case SALA:
                        case RUSI:
                        case SUA:
                        case HIP:
                        case CHULA:
                        case NOKHUK:
                            {
                            alt11=13;
                            }
                            break;
                        default:
                            NoViableAltException nvae =
                                new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 26, input);

                            throw nvae;
                        }

                        }
                        break;
                    case I:
                        {
                        int LA11_27 = input.LA(4);

                        if ( (LA11_27==EOF||(LA11_27>=ADIGIT && LA11_27<=SYMBOL)||LA11_27==WS||LA11_27==NONTHAI||(LA11_27>=A && LA11_27<=KHOMUT)) ) {
                            alt11=13;
                        }
                        else if ( (LA11_27==TONE||(LA11_27>=KAI && LA11_27<=NOKHUK)) ) {
                            alt11=7;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 27, input);

                            throw nvae;
                        }
                        }
                        break;
                    default:
                        NoViableAltException nvae =
                            new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 15, input);

                        throw nvae;
                    }

                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 2, input);

                    throw nvae;
                }
                }
                break;
            case AE:
                {
                int LA11_3 = input.LA(2);

                if ( ((LA11_3>=KAI && LA11_3<=NOKHUK)) ) {
                    switch ( input.LA(3) ) {
                    case TONE:
                        {
                        int LA11_28 = input.LA(4);

                        if ( (LA11_28==A) ) {
                            alt11=11;
                        }
                        else if ( (LA11_28==EOF||(LA11_28>=ADIGIT && LA11_28<=SYMBOL)||LA11_28==WS||LA11_28==NONTHAI||(LA11_28>=HANAKAT && LA11_28<=NOKHUK)) ) {
                            alt11=13;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 28, input);

                            throw nvae;
                        }
                        }
                        break;
                    case A:
                        {
                        alt11=11;
                        }
                        break;
                    case TAIKHU:
                        {
                        int LA11_30 = input.LA(4);

                        if ( ((LA11_30>=KAI && LA11_30<=NOKHUK)) ) {
                            alt11=11;
                        }
                        else if ( (LA11_30==EOF||(LA11_30>=ADIGIT && LA11_30<=SYMBOL)||LA11_30==WS||LA11_30==NONTHAI||(LA11_30>=A && LA11_30<=KHOMUT)) ) {
                            alt11=13;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 30, input);

                            throw nvae;
                        }
                        }
                        break;
                    case EOF:
                    case ADIGIT:
                    case TDIGIT:
                    case SYMBOL:
                    case WS:
                    case NONTHAI:
                    case HANAKAT:
                    case AA:
                    case AM:
                    case I:
                    case II:
                    case UE:
                    case UEE:
                    case U:
                    case UU:
                    case E:
                    case AE:
                    case O:
                    case MUAN:
                    case MALAI:
                    case LAKKHANGYAO:
                    case RU:
                    case LU:
                    case PAIYANNOI:
                    case PHINTHU:
                    case YAMOK:
                    case THANTHAKHAT:
                    case NIKHAHIT:
                    case YAMAKKAN:
                    case FONGMAN:
                    case ANGKHANKHU:
                    case KHOMUT:
                    case KAI:
                    case KHAI:
                    case KHUAT:
                    case KHWAI:
                    case KHON:
                    case RAKHANG:
                    case NGU:
                    case CHAN:
                    case CHING:
                    case CHANG:
                    case SO:
                    case CHOE:
                    case YING:
                    case CHADA:
                    case PATAK:
                    case THAN:
                    case NANGMONTHO:
                    case PHUTHAO:
                    case NEN:
                    case DEK:
                    case TAO:
                    case THUNG:
                    case THAHAN:
                    case THONG:
                    case NU:
                    case BAIMAI:
                    case PLA:
                    case PHUNG:
                    case FA:
                    case PHAN:
                    case FAN:
                    case SAMPHAO:
                    case MA:
                    case YAK:
                    case RUA:
                    case LING:
                    case WAEN:
                    case SALA:
                    case RUSI:
                    case SUA:
                    case HIP:
                    case CHULA:
                    case ANG:
                    case NOKHUK:
                        {
                        alt11=13;
                        }
                        break;
                    default:
                        NoViableAltException nvae =
                            new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 16, input);

                        throw nvae;
                    }

                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 3, input);

                    throw nvae;
                }
                }
                break;
            case O:
                {
                int LA11_4 = input.LA(2);

                if ( ((LA11_4>=KAI && LA11_4<=NOKHUK)) ) {
                    switch ( input.LA(3) ) {
                    case TONE:
                        {
                        int LA11_31 = input.LA(4);

                        if ( (LA11_31==A) ) {
                            alt11=12;
                        }
                        else if ( (LA11_31==EOF||(LA11_31>=ADIGIT && LA11_31<=SYMBOL)||LA11_31==WS||LA11_31==NONTHAI||(LA11_31>=HANAKAT && LA11_31<=NOKHUK)) ) {
                            alt11=13;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 31, input);

                            throw nvae;
                        }
                        }
                        break;
                    case EOF:
                    case ADIGIT:
                    case TDIGIT:
                    case SYMBOL:
                    case WS:
                    case NONTHAI:
                    case HANAKAT:
                    case AA:
                    case AM:
                    case I:
                    case II:
                    case UE:
                    case UEE:
                    case U:
                    case UU:
                    case E:
                    case AE:
                    case O:
                    case MUAN:
                    case MALAI:
                    case LAKKHANGYAO:
                    case RU:
                    case LU:
                    case PAIYANNOI:
                    case PHINTHU:
                    case YAMOK:
                    case TAIKHU:
                    case THANTHAKHAT:
                    case NIKHAHIT:
                    case YAMAKKAN:
                    case FONGMAN:
                    case ANGKHANKHU:
                    case KHOMUT:
                    case KAI:
                    case KHAI:
                    case KHUAT:
                    case KHWAI:
                    case KHON:
                    case RAKHANG:
                    case NGU:
                    case CHAN:
                    case CHING:
                    case CHANG:
                    case SO:
                    case CHOE:
                    case YING:
                    case CHADA:
                    case PATAK:
                    case THAN:
                    case NANGMONTHO:
                    case PHUTHAO:
                    case NEN:
                    case DEK:
                    case TAO:
                    case THUNG:
                    case THAHAN:
                    case THONG:
                    case NU:
                    case BAIMAI:
                    case PLA:
                    case PHUNG:
                    case FA:
                    case PHAN:
                    case FAN:
                    case SAMPHAO:
                    case MA:
                    case YAK:
                    case RUA:
                    case LING:
                    case WAEN:
                    case SALA:
                    case RUSI:
                    case SUA:
                    case HIP:
                    case CHULA:
                    case ANG:
                    case NOKHUK:
                        {
                        alt11=13;
                        }
                        break;
                    case A:
                        {
                        alt11=12;
                        }
                        break;
                    default:
                        NoViableAltException nvae =
                            new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 17, input);

                        throw nvae;
                    }

                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 4, input);

                    throw nvae;
                }
                }
                break;
            case MUAN:
            case MALAI:
                {
                alt11=13;
                }
                break;
            case RU:
            case LU:
                {
                alt11=14;
                }
                break;
            case PAIYANNOI:
            case YAMOK:
            case FONGMAN:
            case ANGKHANKHU:
            case KHOMUT:
                {
                alt11=15;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("252:1: tcc : ( ( c ( abv )? kill ) -> ^( CLUSTER_TCC c ( abv )? kill ) | ( c abv ( TONE )? ) -> ^( CLUSTER_TCC c abv ( TONE )? ) | ( c sv ) -> ^( CLUSTER_TCC c sv ) | ( c TAIKHU ) -> ^( CLUSTER_TCC c TAIKHU ) | ( c hanakat_c ) -> ^( CLUSTER_TCC c hanakat_c ) | ( c ( TONE )? ( fv )? ) -> ^( CLUSTER_TCC c ( TONE )? ( fv )? ) | ( E c I e_i_opt ) -> ^( CLUSTER_TCC E c I e_i_opt ) | ( E c II e_ii_opt ) -> ^( CLUSTER_TCC E c II e_ii_opt ) | ( E c UEE e_uee_opt ) -> ^( CLUSTER_TCC E c UEE e_uee_opt ) | ( E c e_opt ) -> ^( CLUSTER_TCC E c e_opt ) | ( AE c ae_opt ) -> ^( CLUSTER_TCC AE c ae_opt ) | ( O c o_opt ) -> ^( CLUSTER_TCC O c o_opt ) | ( lv c ( TONE )? ) -> ^( CLUSTER_TCC lv c ( TONE )? ) | ( sv ) -> ^( CLUSTER_TCC sv ) | ( tsymbol ) -> ^( CLUSTER_TCC tsymbol ) );", 11, 0, input);

                throw nvae;
            }

            switch (alt11) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:252:8: ( c ( abv )? kill )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:252:8: ( c ( abv )? kill )
                    // /home/arthit/projects/siit-commons/src/TCC.g:252:10: c ( abv )? kill
                    {
                    pushFollow(FOLLOW_c_in_tcc1185);
                    c13=c();
                    _fsp--;

                    stream_c.add(c13.getTree());
                    // /home/arthit/projects/siit-commons/src/TCC.g:252:12: ( abv )?
                    int alt6=2;
                    int LA6_0 = input.LA(1);

                    if ( ((LA6_0>=I && LA6_0<=UU)||LA6_0==PHINTHU||LA6_0==TAIKHU||LA6_0==NIKHAHIT) ) {
                        alt6=1;
                    }
                    switch (alt6) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:252:12: abv
                            {
                            pushFollow(FOLLOW_abv_in_tcc1187);
                            abv14=abv();
                            _fsp--;

                            stream_abv.add(abv14.getTree());

                            }
                            break;

                    }

                    pushFollow(FOLLOW_kill_in_tcc1190);
                    kill15=kill();
                    _fsp--;

                    stream_kill.add(kill15.getTree());

                    }


                    // AST REWRITE
                    // elements: abv, c, kill
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 252:24: -> ^( CLUSTER_TCC c ( abv )? kill )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:252:27: ^( CLUSTER_TCC c ( abv )? kill )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_c.next());
                        // /home/arthit/projects/siit-commons/src/TCC.g:252:43: ( abv )?
                        if ( stream_abv.hasNext() ) {
                            adaptor.addChild(root_1, stream_abv.next());

                        }
                        stream_abv.reset();
                        adaptor.addChild(root_1, stream_kill.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 2 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:253:4: ( c abv ( TONE )? )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:253:4: ( c abv ( TONE )? )
                    // /home/arthit/projects/siit-commons/src/TCC.g:253:6: c abv ( TONE )?
                    {
                    pushFollow(FOLLOW_c_in_tcc1212);
                    c16=c();
                    _fsp--;

                    stream_c.add(c16.getTree());
                    pushFollow(FOLLOW_abv_in_tcc1214);
                    abv17=abv();
                    _fsp--;

                    stream_abv.add(abv17.getTree());
                    // /home/arthit/projects/siit-commons/src/TCC.g:253:12: ( TONE )?
                    int alt7=2;
                    int LA7_0 = input.LA(1);

                    if ( (LA7_0==TONE) ) {
                        alt7=1;
                    }
                    switch (alt7) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:253:12: TONE
                            {
                            TONE18=(Token)input.LT(1);
                            match(input,TONE,FOLLOW_TONE_in_tcc1216); 
                            stream_TONE.add(TONE18);


                            }
                            break;

                    }


                    }


                    // AST REWRITE
                    // elements: TONE, abv, c
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 253:20: -> ^( CLUSTER_TCC c abv ( TONE )? )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:253:23: ^( CLUSTER_TCC c abv ( TONE )? )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_c.next());
                        adaptor.addChild(root_1, stream_abv.next());
                        // /home/arthit/projects/siit-commons/src/TCC.g:253:43: ( TONE )?
                        if ( stream_TONE.hasNext() ) {
                            adaptor.addChild(root_1, stream_TONE.next());

                        }
                        stream_TONE.reset();

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 3 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:254:4: ( c sv )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:254:4: ( c sv )
                    // /home/arthit/projects/siit-commons/src/TCC.g:254:6: c sv
                    {
                    pushFollow(FOLLOW_c_in_tcc1239);
                    c19=c();
                    _fsp--;

                    stream_c.add(c19.getTree());
                    pushFollow(FOLLOW_sv_in_tcc1241);
                    sv20=sv();
                    _fsp--;

                    stream_sv.add(sv20.getTree());

                    }


                    // AST REWRITE
                    // elements: c, sv
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 254:13: -> ^( CLUSTER_TCC c sv )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:254:16: ^( CLUSTER_TCC c sv )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_c.next());
                        adaptor.addChild(root_1, stream_sv.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 4 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:255:4: ( c TAIKHU )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:255:4: ( c TAIKHU )
                    // /home/arthit/projects/siit-commons/src/TCC.g:255:6: c TAIKHU
                    {
                    pushFollow(FOLLOW_c_in_tcc1260);
                    c21=c();
                    _fsp--;

                    stream_c.add(c21.getTree());
                    TAIKHU22=(Token)input.LT(1);
                    match(input,TAIKHU,FOLLOW_TAIKHU_in_tcc1262); 
                    stream_TAIKHU.add(TAIKHU22);


                    }


                    // AST REWRITE
                    // elements: TAIKHU, c
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 255:17: -> ^( CLUSTER_TCC c TAIKHU )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:255:20: ^( CLUSTER_TCC c TAIKHU )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_c.next());
                        adaptor.addChild(root_1, stream_TAIKHU.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 5 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:256:4: ( c hanakat_c )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:256:4: ( c hanakat_c )
                    // /home/arthit/projects/siit-commons/src/TCC.g:256:6: c hanakat_c
                    {
                    pushFollow(FOLLOW_c_in_tcc1281);
                    c23=c();
                    _fsp--;

                    stream_c.add(c23.getTree());
                    pushFollow(FOLLOW_hanakat_c_in_tcc1283);
                    hanakat_c24=hanakat_c();
                    _fsp--;

                    stream_hanakat_c.add(hanakat_c24.getTree());

                    }


                    // AST REWRITE
                    // elements: hanakat_c, c
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 256:20: -> ^( CLUSTER_TCC c hanakat_c )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:256:23: ^( CLUSTER_TCC c hanakat_c )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_c.next());
                        adaptor.addChild(root_1, stream_hanakat_c.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 6 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:257:5: ( c ( TONE )? ( fv )? )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:257:5: ( c ( TONE )? ( fv )? )
                    // /home/arthit/projects/siit-commons/src/TCC.g:257:7: c ( TONE )? ( fv )?
                    {
                    pushFollow(FOLLOW_c_in_tcc1303);
                    c25=c();
                    _fsp--;

                    stream_c.add(c25.getTree());
                    // /home/arthit/projects/siit-commons/src/TCC.g:257:9: ( TONE )?
                    int alt8=2;
                    int LA8_0 = input.LA(1);

                    if ( (LA8_0==TONE) ) {
                        alt8=1;
                    }
                    switch (alt8) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:257:9: TONE
                            {
                            TONE26=(Token)input.LT(1);
                            match(input,TONE,FOLLOW_TONE_in_tcc1305); 
                            stream_TONE.add(TONE26);


                            }
                            break;

                    }

                    // /home/arthit/projects/siit-commons/src/TCC.g:257:15: ( fv )?
                    int alt9=2;
                    switch ( input.LA(1) ) {
                        case A:
                            {
                            alt9=1;
                            }
                            break;
                        case AA:
                            {
                            alt9=1;
                            }
                            break;
                        case AM:
                            {
                            alt9=1;
                            }
                            break;
                        case LAKKHANGYAO:
                            {
                            alt9=1;
                            }
                            break;
                        case NIKHAHIT:
                            {
                            int LA9_5 = input.LA(2);

                            if ( (LA9_5==AA) ) {
                                alt9=1;
                            }
                            }
                            break;
                    }

                    switch (alt9) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:257:15: fv
                            {
                            pushFollow(FOLLOW_fv_in_tcc1308);
                            fv27=fv();
                            _fsp--;

                            stream_fv.add(fv27.getTree());

                            }
                            break;

                    }


                    }


                    // AST REWRITE
                    // elements: TONE, fv, c
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 257:21: -> ^( CLUSTER_TCC c ( TONE )? ( fv )? )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:257:24: ^( CLUSTER_TCC c ( TONE )? ( fv )? )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_c.next());
                        // /home/arthit/projects/siit-commons/src/TCC.g:257:40: ( TONE )?
                        if ( stream_TONE.hasNext() ) {
                            adaptor.addChild(root_1, stream_TONE.next());

                        }
                        stream_TONE.reset();
                        // /home/arthit/projects/siit-commons/src/TCC.g:257:46: ( fv )?
                        if ( stream_fv.hasNext() ) {
                            adaptor.addChild(root_1, stream_fv.next());

                        }
                        stream_fv.reset();

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 7 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:258:4: ( E c I e_i_opt )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:258:4: ( E c I e_i_opt )
                    // /home/arthit/projects/siit-commons/src/TCC.g:258:6: E c I e_i_opt
                    {
                    E28=(Token)input.LT(1);
                    match(input,E,FOLLOW_E_in_tcc1332); 
                    stream_E.add(E28);

                    pushFollow(FOLLOW_c_in_tcc1334);
                    c29=c();
                    _fsp--;

                    stream_c.add(c29.getTree());
                    I30=(Token)input.LT(1);
                    match(input,I,FOLLOW_I_in_tcc1336); 
                    stream_I.add(I30);

                    pushFollow(FOLLOW_e_i_opt_in_tcc1338);
                    e_i_opt31=e_i_opt();
                    _fsp--;

                    stream_e_i_opt.add(e_i_opt31.getTree());

                    }


                    // AST REWRITE
                    // elements: I, c, E, e_i_opt
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 258:22: -> ^( CLUSTER_TCC E c I e_i_opt )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:258:25: ^( CLUSTER_TCC E c I e_i_opt )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_E.next());
                        adaptor.addChild(root_1, stream_c.next());
                        adaptor.addChild(root_1, stream_I.next());
                        adaptor.addChild(root_1, stream_e_i_opt.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 8 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:259:4: ( E c II e_ii_opt )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:259:4: ( E c II e_ii_opt )
                    // /home/arthit/projects/siit-commons/src/TCC.g:259:6: E c II e_ii_opt
                    {
                    E32=(Token)input.LT(1);
                    match(input,E,FOLLOW_E_in_tcc1361); 
                    stream_E.add(E32);

                    pushFollow(FOLLOW_c_in_tcc1363);
                    c33=c();
                    _fsp--;

                    stream_c.add(c33.getTree());
                    II34=(Token)input.LT(1);
                    match(input,II,FOLLOW_II_in_tcc1365); 
                    stream_II.add(II34);

                    pushFollow(FOLLOW_e_ii_opt_in_tcc1367);
                    e_ii_opt35=e_ii_opt();
                    _fsp--;

                    stream_e_ii_opt.add(e_ii_opt35.getTree());

                    }


                    // AST REWRITE
                    // elements: e_ii_opt, II, E, c
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 259:24: -> ^( CLUSTER_TCC E c II e_ii_opt )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:259:27: ^( CLUSTER_TCC E c II e_ii_opt )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_E.next());
                        adaptor.addChild(root_1, stream_c.next());
                        adaptor.addChild(root_1, stream_II.next());
                        adaptor.addChild(root_1, stream_e_ii_opt.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 9 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:260:4: ( E c UEE e_uee_opt )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:260:4: ( E c UEE e_uee_opt )
                    // /home/arthit/projects/siit-commons/src/TCC.g:260:6: E c UEE e_uee_opt
                    {
                    E36=(Token)input.LT(1);
                    match(input,E,FOLLOW_E_in_tcc1390); 
                    stream_E.add(E36);

                    pushFollow(FOLLOW_c_in_tcc1392);
                    c37=c();
                    _fsp--;

                    stream_c.add(c37.getTree());
                    UEE38=(Token)input.LT(1);
                    match(input,UEE,FOLLOW_UEE_in_tcc1394); 
                    stream_UEE.add(UEE38);

                    pushFollow(FOLLOW_e_uee_opt_in_tcc1396);
                    e_uee_opt39=e_uee_opt();
                    _fsp--;

                    stream_e_uee_opt.add(e_uee_opt39.getTree());

                    }


                    // AST REWRITE
                    // elements: c, UEE, e_uee_opt, E
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 260:26: -> ^( CLUSTER_TCC E c UEE e_uee_opt )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:260:29: ^( CLUSTER_TCC E c UEE e_uee_opt )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_E.next());
                        adaptor.addChild(root_1, stream_c.next());
                        adaptor.addChild(root_1, stream_UEE.next());
                        adaptor.addChild(root_1, stream_e_uee_opt.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 10 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:261:4: ( E c e_opt )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:261:4: ( E c e_opt )
                    // /home/arthit/projects/siit-commons/src/TCC.g:261:6: E c e_opt
                    {
                    E40=(Token)input.LT(1);
                    match(input,E,FOLLOW_E_in_tcc1419); 
                    stream_E.add(E40);

                    pushFollow(FOLLOW_c_in_tcc1421);
                    c41=c();
                    _fsp--;

                    stream_c.add(c41.getTree());
                    pushFollow(FOLLOW_e_opt_in_tcc1423);
                    e_opt42=e_opt();
                    _fsp--;

                    stream_e_opt.add(e_opt42.getTree());

                    }


                    // AST REWRITE
                    // elements: c, E, e_opt
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 261:18: -> ^( CLUSTER_TCC E c e_opt )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:261:21: ^( CLUSTER_TCC E c e_opt )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_E.next());
                        adaptor.addChild(root_1, stream_c.next());
                        adaptor.addChild(root_1, stream_e_opt.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 11 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:262:4: ( AE c ae_opt )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:262:4: ( AE c ae_opt )
                    // /home/arthit/projects/siit-commons/src/TCC.g:262:6: AE c ae_opt
                    {
                    AE43=(Token)input.LT(1);
                    match(input,AE,FOLLOW_AE_in_tcc1444); 
                    stream_AE.add(AE43);

                    pushFollow(FOLLOW_c_in_tcc1446);
                    c44=c();
                    _fsp--;

                    stream_c.add(c44.getTree());
                    pushFollow(FOLLOW_ae_opt_in_tcc1448);
                    ae_opt45=ae_opt();
                    _fsp--;

                    stream_ae_opt.add(ae_opt45.getTree());

                    }


                    // AST REWRITE
                    // elements: AE, c, ae_opt
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 262:20: -> ^( CLUSTER_TCC AE c ae_opt )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:262:23: ^( CLUSTER_TCC AE c ae_opt )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_AE.next());
                        adaptor.addChild(root_1, stream_c.next());
                        adaptor.addChild(root_1, stream_ae_opt.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 12 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:263:4: ( O c o_opt )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:263:4: ( O c o_opt )
                    // /home/arthit/projects/siit-commons/src/TCC.g:263:6: O c o_opt
                    {
                    O46=(Token)input.LT(1);
                    match(input,O,FOLLOW_O_in_tcc1469); 
                    stream_O.add(O46);

                    pushFollow(FOLLOW_c_in_tcc1471);
                    c47=c();
                    _fsp--;

                    stream_c.add(c47.getTree());
                    pushFollow(FOLLOW_o_opt_in_tcc1473);
                    o_opt48=o_opt();
                    _fsp--;

                    stream_o_opt.add(o_opt48.getTree());

                    }


                    // AST REWRITE
                    // elements: c, o_opt, O
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 263:18: -> ^( CLUSTER_TCC O c o_opt )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:263:21: ^( CLUSTER_TCC O c o_opt )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_O.next());
                        adaptor.addChild(root_1, stream_c.next());
                        adaptor.addChild(root_1, stream_o_opt.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 13 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:264:4: ( lv c ( TONE )? )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:264:4: ( lv c ( TONE )? )
                    // /home/arthit/projects/siit-commons/src/TCC.g:264:6: lv c ( TONE )?
                    {
                    pushFollow(FOLLOW_lv_in_tcc1494);
                    lv49=lv();
                    _fsp--;

                    stream_lv.add(lv49.getTree());
                    pushFollow(FOLLOW_c_in_tcc1496);
                    c50=c();
                    _fsp--;

                    stream_c.add(c50.getTree());
                    // /home/arthit/projects/siit-commons/src/TCC.g:264:11: ( TONE )?
                    int alt10=2;
                    int LA10_0 = input.LA(1);

                    if ( (LA10_0==TONE) ) {
                        alt10=1;
                    }
                    switch (alt10) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:264:11: TONE
                            {
                            TONE51=(Token)input.LT(1);
                            match(input,TONE,FOLLOW_TONE_in_tcc1498); 
                            stream_TONE.add(TONE51);


                            }
                            break;

                    }


                    }


                    // AST REWRITE
                    // elements: TONE, c, lv
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 264:19: -> ^( CLUSTER_TCC lv c ( TONE )? )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:264:22: ^( CLUSTER_TCC lv c ( TONE )? )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_lv.next());
                        adaptor.addChild(root_1, stream_c.next());
                        // /home/arthit/projects/siit-commons/src/TCC.g:264:41: ( TONE )?
                        if ( stream_TONE.hasNext() ) {
                            adaptor.addChild(root_1, stream_TONE.next());

                        }
                        stream_TONE.reset();

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 14 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:265:4: ( sv )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:265:4: ( sv )
                    // /home/arthit/projects/siit-commons/src/TCC.g:265:6: sv
                    {
                    pushFollow(FOLLOW_sv_in_tcc1521);
                    sv52=sv();
                    _fsp--;

                    stream_sv.add(sv52.getTree());

                    }


                    // AST REWRITE
                    // elements: sv
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 265:11: -> ^( CLUSTER_TCC sv )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:265:14: ^( CLUSTER_TCC sv )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_sv.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 15 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:266:4: ( tsymbol )
                    {
                    // /home/arthit/projects/siit-commons/src/TCC.g:266:4: ( tsymbol )
                    // /home/arthit/projects/siit-commons/src/TCC.g:266:6: tsymbol
                    {
                    pushFollow(FOLLOW_tsymbol_in_tcc1538);
                    tsymbol53=tsymbol();
                    _fsp--;

                    stream_tsymbol.add(tsymbol53.getTree());

                    }


                    // AST REWRITE
                    // elements: tsymbol
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 266:16: -> ^( CLUSTER_TCC tsymbol )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:266:19: ^( CLUSTER_TCC tsymbol )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_TCC, "CLUSTER_TCC"), root_1);

                        adaptor.addChild(root_1, stream_tsymbol.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;

            }
            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end tcc

    public static class abtcc_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start abtcc
    // /home/arthit/projects/siit-commons/src/TCC.g:270:1: abtcc : ( fv -> ^( CLUSTER_ATCC fv ) | lv -> ^( CLUSTER_BTCC lv ) | abv -> ^( CLUSTER_ATCC abv ) | hanakat_c -> ^( CLUSTER_ATCC hanakat_c ) | kill -> ^( CLUSTER_ATCC kill ) );
    public final abtcc_return abtcc() throws RecognitionException {
        abtcc_return retval = new abtcc_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        fv_return fv54 = null;

        lv_return lv55 = null;

        abv_return abv56 = null;

        hanakat_c_return hanakat_c57 = null;

        kill_return kill58 = null;


        RewriteRuleSubtreeStream stream_abv=new RewriteRuleSubtreeStream(adaptor,"rule abv");
        RewriteRuleSubtreeStream stream_fv=new RewriteRuleSubtreeStream(adaptor,"rule fv");
        RewriteRuleSubtreeStream stream_hanakat_c=new RewriteRuleSubtreeStream(adaptor,"rule hanakat_c");
        RewriteRuleSubtreeStream stream_kill=new RewriteRuleSubtreeStream(adaptor,"rule kill");
        RewriteRuleSubtreeStream stream_lv=new RewriteRuleSubtreeStream(adaptor,"rule lv");
        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:270:8: ( fv -> ^( CLUSTER_ATCC fv ) | lv -> ^( CLUSTER_BTCC lv ) | abv -> ^( CLUSTER_ATCC abv ) | hanakat_c -> ^( CLUSTER_ATCC hanakat_c ) | kill -> ^( CLUSTER_ATCC kill ) )
            int alt12=5;
            switch ( input.LA(1) ) {
            case A:
            case AA:
            case AM:
            case LAKKHANGYAO:
                {
                alt12=1;
                }
                break;
            case NIKHAHIT:
                {
                int LA12_2 = input.LA(2);

                if ( (LA12_2==AA) ) {
                    alt12=1;
                }
                else if ( (LA12_2==EOF||(LA12_2>=ADIGIT && LA12_2<=SYMBOL)||LA12_2==WS||LA12_2==NONTHAI||(LA12_2>=A && LA12_2<=HANAKAT)||(LA12_2>=AM && LA12_2<=NOKHUK)) ) {
                    alt12=3;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("270:1: abtcc : ( fv -> ^( CLUSTER_ATCC fv ) | lv -> ^( CLUSTER_BTCC lv ) | abv -> ^( CLUSTER_ATCC abv ) | hanakat_c -> ^( CLUSTER_ATCC hanakat_c ) | kill -> ^( CLUSTER_ATCC kill ) );", 12, 2, input);

                    throw nvae;
                }
                }
                break;
            case E:
            case AE:
            case O:
            case MUAN:
            case MALAI:
                {
                alt12=2;
                }
                break;
            case I:
            case II:
            case UE:
            case UEE:
            case U:
            case UU:
            case PHINTHU:
            case TAIKHU:
                {
                alt12=3;
                }
                break;
            case HANAKAT:
                {
                alt12=4;
                }
                break;
            case THANTHAKHAT:
            case YAMAKKAN:
                {
                alt12=5;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("270:1: abtcc : ( fv -> ^( CLUSTER_ATCC fv ) | lv -> ^( CLUSTER_BTCC lv ) | abv -> ^( CLUSTER_ATCC abv ) | hanakat_c -> ^( CLUSTER_ATCC hanakat_c ) | kill -> ^( CLUSTER_ATCC kill ) );", 12, 0, input);

                throw nvae;
            }

            switch (alt12) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:270:10: fv
                    {
                    pushFollow(FOLLOW_fv_in_abtcc1560);
                    fv54=fv();
                    _fsp--;

                    stream_fv.add(fv54.getTree());

                    // AST REWRITE
                    // elements: fv
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 270:13: -> ^( CLUSTER_ATCC fv )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:270:16: ^( CLUSTER_ATCC fv )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_ATCC, "CLUSTER_ATCC"), root_1);

                        adaptor.addChild(root_1, stream_fv.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 2 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:271:4: lv
                    {
                    pushFollow(FOLLOW_lv_in_abtcc1573);
                    lv55=lv();
                    _fsp--;

                    stream_lv.add(lv55.getTree());

                    // AST REWRITE
                    // elements: lv
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 271:7: -> ^( CLUSTER_BTCC lv )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:271:10: ^( CLUSTER_BTCC lv )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_BTCC, "CLUSTER_BTCC"), root_1);

                        adaptor.addChild(root_1, stream_lv.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 3 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:272:4: abv
                    {
                    pushFollow(FOLLOW_abv_in_abtcc1586);
                    abv56=abv();
                    _fsp--;

                    stream_abv.add(abv56.getTree());

                    // AST REWRITE
                    // elements: abv
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 272:8: -> ^( CLUSTER_ATCC abv )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:272:11: ^( CLUSTER_ATCC abv )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_ATCC, "CLUSTER_ATCC"), root_1);

                        adaptor.addChild(root_1, stream_abv.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 4 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:273:4: hanakat_c
                    {
                    pushFollow(FOLLOW_hanakat_c_in_abtcc1599);
                    hanakat_c57=hanakat_c();
                    _fsp--;

                    stream_hanakat_c.add(hanakat_c57.getTree());

                    // AST REWRITE
                    // elements: hanakat_c
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 273:14: -> ^( CLUSTER_ATCC hanakat_c )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:273:17: ^( CLUSTER_ATCC hanakat_c )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_ATCC, "CLUSTER_ATCC"), root_1);

                        adaptor.addChild(root_1, stream_hanakat_c.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;
                case 5 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:274:4: kill
                    {
                    pushFollow(FOLLOW_kill_in_abtcc1612);
                    kill58=kill();
                    _fsp--;

                    stream_kill.add(kill58.getTree());

                    // AST REWRITE
                    // elements: kill
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 274:9: -> ^( CLUSTER_ATCC kill )
                    {
                        // /home/arthit/projects/siit-commons/src/TCC.g:274:12: ^( CLUSTER_ATCC kill )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(CLUSTER_ATCC, "CLUSTER_ATCC"), root_1);

                        adaptor.addChild(root_1, stream_kill.next());

                        adaptor.addChild(root_0, root_1);
                        }

                    }



                    }
                    break;

            }
            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end abtcc

    public static class hanakat_c_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start hanakat_c
    // /home/arthit/projects/siit-commons/src/TCC.g:277:1: hanakat_c : ( HANAKAT ( TONE )? c ( A | I | U )? | HANAKAT ( TONE )? c | HANAKAT ( TONE )? );
    public final hanakat_c_return hanakat_c() throws RecognitionException {
        hanakat_c_return retval = new hanakat_c_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token HANAKAT59=null;
        Token TONE60=null;
        Token set62=null;
        Token HANAKAT63=null;
        Token TONE64=null;
        Token HANAKAT66=null;
        Token TONE67=null;
        c_return c61 = null;

        c_return c65 = null;


        CommonTree HANAKAT59_tree=null;
        CommonTree TONE60_tree=null;
        CommonTree set62_tree=null;
        CommonTree HANAKAT63_tree=null;
        CommonTree TONE64_tree=null;
        CommonTree HANAKAT66_tree=null;
        CommonTree TONE67_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:277:11: ( HANAKAT ( TONE )? c ( A | I | U )? | HANAKAT ( TONE )? c | HANAKAT ( TONE )? )
            int alt17=3;
            int LA17_0 = input.LA(1);

            if ( (LA17_0==HANAKAT) ) {
                switch ( input.LA(2) ) {
                case TONE:
                    {
                    int LA17_2 = input.LA(3);

                    if ( (LA17_2==EOF||(LA17_2>=ADIGIT && LA17_2<=SYMBOL)||LA17_2==WS||LA17_2==NONTHAI||(LA17_2>=A && LA17_2<=KHOMUT)) ) {
                        alt17=3;
                    }
                    else if ( ((LA17_2>=KAI && LA17_2<=NOKHUK)) ) {
                        alt17=1;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("277:1: hanakat_c : ( HANAKAT ( TONE )? c ( A | I | U )? | HANAKAT ( TONE )? c | HANAKAT ( TONE )? );", 17, 2, input);

                        throw nvae;
                    }
                    }
                    break;
                case EOF:
                case ADIGIT:
                case TDIGIT:
                case SYMBOL:
                case WS:
                case NONTHAI:
                case A:
                case HANAKAT:
                case AA:
                case AM:
                case I:
                case II:
                case UE:
                case UEE:
                case U:
                case UU:
                case E:
                case AE:
                case O:
                case MUAN:
                case MALAI:
                case LAKKHANGYAO:
                case RU:
                case LU:
                case PAIYANNOI:
                case PHINTHU:
                case YAMOK:
                case TAIKHU:
                case THANTHAKHAT:
                case NIKHAHIT:
                case YAMAKKAN:
                case FONGMAN:
                case ANGKHANKHU:
                case KHOMUT:
                    {
                    alt17=3;
                    }
                    break;
                case KAI:
                case KHAI:
                case KHUAT:
                case KHWAI:
                case KHON:
                case RAKHANG:
                case NGU:
                case CHAN:
                case CHING:
                case CHANG:
                case SO:
                case CHOE:
                case YING:
                case CHADA:
                case PATAK:
                case THAN:
                case NANGMONTHO:
                case PHUTHAO:
                case NEN:
                case DEK:
                case TAO:
                case THUNG:
                case THAHAN:
                case THONG:
                case NU:
                case BAIMAI:
                case PLA:
                case PHUNG:
                case FA:
                case PHAN:
                case FAN:
                case SAMPHAO:
                case MA:
                case YAK:
                case RUA:
                case LING:
                case WAEN:
                case SALA:
                case RUSI:
                case SUA:
                case HIP:
                case CHULA:
                case ANG:
                case NOKHUK:
                    {
                    alt17=1;
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("277:1: hanakat_c : ( HANAKAT ( TONE )? c ( A | I | U )? | HANAKAT ( TONE )? c | HANAKAT ( TONE )? );", 17, 1, input);

                    throw nvae;
                }

            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("277:1: hanakat_c : ( HANAKAT ( TONE )? c ( A | I | U )? | HANAKAT ( TONE )? c | HANAKAT ( TONE )? );", 17, 0, input);

                throw nvae;
            }
            switch (alt17) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:277:13: HANAKAT ( TONE )? c ( A | I | U )?
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    HANAKAT59=(Token)input.LT(1);
                    match(input,HANAKAT,FOLLOW_HANAKAT_in_hanakat_c1633); 
                    HANAKAT59_tree = (CommonTree)adaptor.create(HANAKAT59);
                    adaptor.addChild(root_0, HANAKAT59_tree);

                    // /home/arthit/projects/siit-commons/src/TCC.g:277:21: ( TONE )?
                    int alt13=2;
                    int LA13_0 = input.LA(1);

                    if ( (LA13_0==TONE) ) {
                        alt13=1;
                    }
                    switch (alt13) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:277:21: TONE
                            {
                            TONE60=(Token)input.LT(1);
                            match(input,TONE,FOLLOW_TONE_in_hanakat_c1635); 
                            TONE60_tree = (CommonTree)adaptor.create(TONE60);
                            adaptor.addChild(root_0, TONE60_tree);


                            }
                            break;

                    }

                    pushFollow(FOLLOW_c_in_hanakat_c1638);
                    c61=c();
                    _fsp--;

                    adaptor.addChild(root_0, c61.getTree());
                    // /home/arthit/projects/siit-commons/src/TCC.g:277:29: ( A | I | U )?
                    int alt14=2;
                    int LA14_0 = input.LA(1);

                    if ( (LA14_0==A) ) {
                        alt14=1;
                    }
                    else if ( (LA14_0==I||LA14_0==U) ) {
                        alt14=1;
                    }
                    switch (alt14) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:
                            {
                            set62=(Token)input.LT(1);
                            if ( input.LA(1)==A||input.LA(1)==I||input.LA(1)==U ) {
                                input.consume();
                                adaptor.addChild(root_0, adaptor.create(set62));
                                errorRecovery=false;
                            }
                            else {
                                MismatchedSetException mse =
                                    new MismatchedSetException(null,input);
                                recoverFromMismatchedSet(input,mse,FOLLOW_set_in_hanakat_c1640);    throw mse;
                            }


                            }
                            break;

                    }


                    }
                    break;
                case 2 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:278:4: HANAKAT ( TONE )? c
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    HANAKAT63=(Token)input.LT(1);
                    match(input,HANAKAT,FOLLOW_HANAKAT_in_hanakat_c1656); 
                    HANAKAT63_tree = (CommonTree)adaptor.create(HANAKAT63);
                    adaptor.addChild(root_0, HANAKAT63_tree);

                    // /home/arthit/projects/siit-commons/src/TCC.g:278:12: ( TONE )?
                    int alt15=2;
                    int LA15_0 = input.LA(1);

                    if ( (LA15_0==TONE) ) {
                        alt15=1;
                    }
                    switch (alt15) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:278:12: TONE
                            {
                            TONE64=(Token)input.LT(1);
                            match(input,TONE,FOLLOW_TONE_in_hanakat_c1658); 
                            TONE64_tree = (CommonTree)adaptor.create(TONE64);
                            adaptor.addChild(root_0, TONE64_tree);


                            }
                            break;

                    }

                    pushFollow(FOLLOW_c_in_hanakat_c1661);
                    c65=c();
                    _fsp--;

                    adaptor.addChild(root_0, c65.getTree());

                    }
                    break;
                case 3 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:279:4: HANAKAT ( TONE )?
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    HANAKAT66=(Token)input.LT(1);
                    match(input,HANAKAT,FOLLOW_HANAKAT_in_hanakat_c1666); 
                    HANAKAT66_tree = (CommonTree)adaptor.create(HANAKAT66);
                    adaptor.addChild(root_0, HANAKAT66_tree);

                    // /home/arthit/projects/siit-commons/src/TCC.g:279:12: ( TONE )?
                    int alt16=2;
                    int LA16_0 = input.LA(1);

                    if ( (LA16_0==TONE) ) {
                        alt16=1;
                    }
                    switch (alt16) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:279:12: TONE
                            {
                            TONE67=(Token)input.LT(1);
                            match(input,TONE,FOLLOW_TONE_in_hanakat_c1668); 
                            TONE67_tree = (CommonTree)adaptor.create(TONE67);
                            adaptor.addChild(root_0, TONE67_tree);


                            }
                            break;

                    }


                    }
                    break;

            }
            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end hanakat_c

    public static class e_opt_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start e_opt
    // /home/arthit/projects/siit-commons/src/TCC.g:281:1: e_opt : ( c ( TONE )? AA A | ( TONE )? AA ( A )? | ( TONE )? A | TAIKHU c );
    public final e_opt_return e_opt() throws RecognitionException {
        e_opt_return retval = new e_opt_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token TONE69=null;
        Token AA70=null;
        Token A71=null;
        Token TONE72=null;
        Token AA73=null;
        Token A74=null;
        Token TONE75=null;
        Token A76=null;
        Token TAIKHU77=null;
        c_return c68 = null;

        c_return c78 = null;


        CommonTree TONE69_tree=null;
        CommonTree AA70_tree=null;
        CommonTree A71_tree=null;
        CommonTree TONE72_tree=null;
        CommonTree AA73_tree=null;
        CommonTree A74_tree=null;
        CommonTree TONE75_tree=null;
        CommonTree A76_tree=null;
        CommonTree TAIKHU77_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:281:7: ( c ( TONE )? AA A | ( TONE )? AA ( A )? | ( TONE )? A | TAIKHU c )
            int alt22=4;
            switch ( input.LA(1) ) {
            case KAI:
            case KHAI:
            case KHUAT:
            case KHWAI:
            case KHON:
            case RAKHANG:
            case NGU:
            case CHAN:
            case CHING:
            case CHANG:
            case SO:
            case CHOE:
            case YING:
            case CHADA:
            case PATAK:
            case THAN:
            case NANGMONTHO:
            case PHUTHAO:
            case NEN:
            case DEK:
            case TAO:
            case THUNG:
            case THAHAN:
            case THONG:
            case NU:
            case BAIMAI:
            case PLA:
            case PHUNG:
            case FA:
            case PHAN:
            case FAN:
            case SAMPHAO:
            case MA:
            case YAK:
            case RUA:
            case LING:
            case WAEN:
            case SALA:
            case RUSI:
            case SUA:
            case HIP:
            case CHULA:
            case ANG:
            case NOKHUK:
                {
                alt22=1;
                }
                break;
            case TONE:
                {
                int LA22_2 = input.LA(2);

                if ( (LA22_2==A) ) {
                    alt22=3;
                }
                else if ( (LA22_2==AA) ) {
                    alt22=2;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("281:1: e_opt : ( c ( TONE )? AA A | ( TONE )? AA ( A )? | ( TONE )? A | TAIKHU c );", 22, 2, input);

                    throw nvae;
                }
                }
                break;
            case AA:
                {
                alt22=2;
                }
                break;
            case A:
                {
                alt22=3;
                }
                break;
            case TAIKHU:
                {
                alt22=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("281:1: e_opt : ( c ( TONE )? AA A | ( TONE )? AA ( A )? | ( TONE )? A | TAIKHU c );", 22, 0, input);

                throw nvae;
            }

            switch (alt22) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:281:9: c ( TONE )? AA A
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_c_in_e_opt1678);
                    c68=c();
                    _fsp--;

                    adaptor.addChild(root_0, c68.getTree());
                    // /home/arthit/projects/siit-commons/src/TCC.g:281:11: ( TONE )?
                    int alt18=2;
                    int LA18_0 = input.LA(1);

                    if ( (LA18_0==TONE) ) {
                        alt18=1;
                    }
                    switch (alt18) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:281:11: TONE
                            {
                            TONE69=(Token)input.LT(1);
                            match(input,TONE,FOLLOW_TONE_in_e_opt1680); 
                            TONE69_tree = (CommonTree)adaptor.create(TONE69);
                            adaptor.addChild(root_0, TONE69_tree);


                            }
                            break;

                    }

                    AA70=(Token)input.LT(1);
                    match(input,AA,FOLLOW_AA_in_e_opt1683); 
                    AA70_tree = (CommonTree)adaptor.create(AA70);
                    adaptor.addChild(root_0, AA70_tree);

                    A71=(Token)input.LT(1);
                    match(input,A,FOLLOW_A_in_e_opt1685); 
                    A71_tree = (CommonTree)adaptor.create(A71);
                    adaptor.addChild(root_0, A71_tree);


                    }
                    break;
                case 2 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:282:4: ( TONE )? AA ( A )?
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    // /home/arthit/projects/siit-commons/src/TCC.g:282:4: ( TONE )?
                    int alt19=2;
                    int LA19_0 = input.LA(1);

                    if ( (LA19_0==TONE) ) {
                        alt19=1;
                    }
                    switch (alt19) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:282:4: TONE
                            {
                            TONE72=(Token)input.LT(1);
                            match(input,TONE,FOLLOW_TONE_in_e_opt1690); 
                            TONE72_tree = (CommonTree)adaptor.create(TONE72);
                            adaptor.addChild(root_0, TONE72_tree);


                            }
                            break;

                    }

                    AA73=(Token)input.LT(1);
                    match(input,AA,FOLLOW_AA_in_e_opt1693); 
                    AA73_tree = (CommonTree)adaptor.create(AA73);
                    adaptor.addChild(root_0, AA73_tree);

                    // /home/arthit/projects/siit-commons/src/TCC.g:282:13: ( A )?
                    int alt20=2;
                    int LA20_0 = input.LA(1);

                    if ( (LA20_0==A) ) {
                        alt20=1;
                    }
                    switch (alt20) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:282:13: A
                            {
                            A74=(Token)input.LT(1);
                            match(input,A,FOLLOW_A_in_e_opt1695); 
                            A74_tree = (CommonTree)adaptor.create(A74);
                            adaptor.addChild(root_0, A74_tree);


                            }
                            break;

                    }


                    }
                    break;
                case 3 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:283:4: ( TONE )? A
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    // /home/arthit/projects/siit-commons/src/TCC.g:283:4: ( TONE )?
                    int alt21=2;
                    int LA21_0 = input.LA(1);

                    if ( (LA21_0==TONE) ) {
                        alt21=1;
                    }
                    switch (alt21) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:283:4: TONE
                            {
                            TONE75=(Token)input.LT(1);
                            match(input,TONE,FOLLOW_TONE_in_e_opt1701); 
                            TONE75_tree = (CommonTree)adaptor.create(TONE75);
                            adaptor.addChild(root_0, TONE75_tree);


                            }
                            break;

                    }

                    A76=(Token)input.LT(1);
                    match(input,A,FOLLOW_A_in_e_opt1704); 
                    A76_tree = (CommonTree)adaptor.create(A76);
                    adaptor.addChild(root_0, A76_tree);


                    }
                    break;
                case 4 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:284:4: TAIKHU c
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    TAIKHU77=(Token)input.LT(1);
                    match(input,TAIKHU,FOLLOW_TAIKHU_in_e_opt1709); 
                    TAIKHU77_tree = (CommonTree)adaptor.create(TAIKHU77);
                    adaptor.addChild(root_0, TAIKHU77_tree);

                    pushFollow(FOLLOW_c_in_e_opt1711);
                    c78=c();
                    _fsp--;

                    adaptor.addChild(root_0, c78.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end e_opt

    public static class e_i_opt_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start e_i_opt
    // /home/arthit/projects/siit-commons/src/TCC.g:286:1: e_i_opt : ( TONE )? ( c kill )? c ;
    public final e_i_opt_return e_i_opt() throws RecognitionException {
        e_i_opt_return retval = new e_i_opt_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token TONE79=null;
        c_return c80 = null;

        kill_return kill81 = null;

        c_return c82 = null;


        CommonTree TONE79_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:286:9: ( ( TONE )? ( c kill )? c )
            // /home/arthit/projects/siit-commons/src/TCC.g:286:11: ( TONE )? ( c kill )? c
            {
            root_0 = (CommonTree)adaptor.nil();

            // /home/arthit/projects/siit-commons/src/TCC.g:286:11: ( TONE )?
            int alt23=2;
            int LA23_0 = input.LA(1);

            if ( (LA23_0==TONE) ) {
                alt23=1;
            }
            switch (alt23) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:286:11: TONE
                    {
                    TONE79=(Token)input.LT(1);
                    match(input,TONE,FOLLOW_TONE_in_e_i_opt1720); 
                    TONE79_tree = (CommonTree)adaptor.create(TONE79);
                    adaptor.addChild(root_0, TONE79_tree);


                    }
                    break;

            }

            // /home/arthit/projects/siit-commons/src/TCC.g:286:17: ( c kill )?
            int alt24=2;
            int LA24_0 = input.LA(1);

            if ( ((LA24_0>=KAI && LA24_0<=NOKHUK)) ) {
                int LA24_1 = input.LA(2);

                if ( (LA24_1==THANTHAKHAT||LA24_1==YAMAKKAN) ) {
                    int LA24_3 = input.LA(3);

                    if ( ((LA24_3>=KAI && LA24_3<=NOKHUK)) ) {
                        alt24=1;
                    }
                }
            }
            switch (alt24) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:286:18: c kill
                    {
                    pushFollow(FOLLOW_c_in_e_i_opt1724);
                    c80=c();
                    _fsp--;

                    adaptor.addChild(root_0, c80.getTree());
                    pushFollow(FOLLOW_kill_in_e_i_opt1726);
                    kill81=kill();
                    _fsp--;

                    adaptor.addChild(root_0, kill81.getTree());

                    }
                    break;

            }

            pushFollow(FOLLOW_c_in_e_i_opt1730);
            c82=c();
            _fsp--;

            adaptor.addChild(root_0, c82.getTree());

            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end e_i_opt

    public static class e_ii_opt_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start e_ii_opt
    // /home/arthit/projects/siit-commons/src/TCC.g:288:1: e_ii_opt : ( TONE )? YAK ( A )? ;
    public final e_ii_opt_return e_ii_opt() throws RecognitionException {
        e_ii_opt_return retval = new e_ii_opt_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token TONE83=null;
        Token YAK84=null;
        Token A85=null;

        CommonTree TONE83_tree=null;
        CommonTree YAK84_tree=null;
        CommonTree A85_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:288:10: ( ( TONE )? YAK ( A )? )
            // /home/arthit/projects/siit-commons/src/TCC.g:288:12: ( TONE )? YAK ( A )?
            {
            root_0 = (CommonTree)adaptor.nil();

            // /home/arthit/projects/siit-commons/src/TCC.g:288:12: ( TONE )?
            int alt25=2;
            int LA25_0 = input.LA(1);

            if ( (LA25_0==TONE) ) {
                alt25=1;
            }
            switch (alt25) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:288:12: TONE
                    {
                    TONE83=(Token)input.LT(1);
                    match(input,TONE,FOLLOW_TONE_in_e_ii_opt1739); 
                    TONE83_tree = (CommonTree)adaptor.create(TONE83);
                    adaptor.addChild(root_0, TONE83_tree);


                    }
                    break;

            }

            YAK84=(Token)input.LT(1);
            match(input,YAK,FOLLOW_YAK_in_e_ii_opt1742); 
            YAK84_tree = (CommonTree)adaptor.create(YAK84);
            adaptor.addChild(root_0, YAK84_tree);

            // /home/arthit/projects/siit-commons/src/TCC.g:288:22: ( A )?
            int alt26=2;
            int LA26_0 = input.LA(1);

            if ( (LA26_0==A) ) {
                alt26=1;
            }
            switch (alt26) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:288:22: A
                    {
                    A85=(Token)input.LT(1);
                    match(input,A,FOLLOW_A_in_e_ii_opt1744); 
                    A85_tree = (CommonTree)adaptor.create(A85);
                    adaptor.addChild(root_0, A85_tree);


                    }
                    break;

            }


            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end e_ii_opt

    public static class e_uee_opt_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start e_uee_opt
    // /home/arthit/projects/siit-commons/src/TCC.g:290:1: e_uee_opt : ( TONE )? ANG ( A )? ;
    public final e_uee_opt_return e_uee_opt() throws RecognitionException {
        e_uee_opt_return retval = new e_uee_opt_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token TONE86=null;
        Token ANG87=null;
        Token A88=null;

        CommonTree TONE86_tree=null;
        CommonTree ANG87_tree=null;
        CommonTree A88_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:291:2: ( ( TONE )? ANG ( A )? )
            // /home/arthit/projects/siit-commons/src/TCC.g:291:4: ( TONE )? ANG ( A )?
            {
            root_0 = (CommonTree)adaptor.nil();

            // /home/arthit/projects/siit-commons/src/TCC.g:291:4: ( TONE )?
            int alt27=2;
            int LA27_0 = input.LA(1);

            if ( (LA27_0==TONE) ) {
                alt27=1;
            }
            switch (alt27) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:291:4: TONE
                    {
                    TONE86=(Token)input.LT(1);
                    match(input,TONE,FOLLOW_TONE_in_e_uee_opt1755); 
                    TONE86_tree = (CommonTree)adaptor.create(TONE86);
                    adaptor.addChild(root_0, TONE86_tree);


                    }
                    break;

            }

            ANG87=(Token)input.LT(1);
            match(input,ANG,FOLLOW_ANG_in_e_uee_opt1758); 
            ANG87_tree = (CommonTree)adaptor.create(ANG87);
            adaptor.addChild(root_0, ANG87_tree);

            // /home/arthit/projects/siit-commons/src/TCC.g:291:14: ( A )?
            int alt28=2;
            int LA28_0 = input.LA(1);

            if ( (LA28_0==A) ) {
                alt28=1;
            }
            switch (alt28) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:291:14: A
                    {
                    A88=(Token)input.LT(1);
                    match(input,A,FOLLOW_A_in_e_uee_opt1760); 
                    A88_tree = (CommonTree)adaptor.create(A88);
                    adaptor.addChild(root_0, A88_tree);


                    }
                    break;

            }


            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end e_uee_opt

    public static class ae_opt_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start ae_opt
    // /home/arthit/projects/siit-commons/src/TCC.g:293:1: ae_opt : ( ( TONE )? A | TAIKHU c );
    public final ae_opt_return ae_opt() throws RecognitionException {
        ae_opt_return retval = new ae_opt_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token TONE89=null;
        Token A90=null;
        Token TAIKHU91=null;
        c_return c92 = null;


        CommonTree TONE89_tree=null;
        CommonTree A90_tree=null;
        CommonTree TAIKHU91_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:293:8: ( ( TONE )? A | TAIKHU c )
            int alt30=2;
            int LA30_0 = input.LA(1);

            if ( ((LA30_0>=TONE && LA30_0<=A)) ) {
                alt30=1;
            }
            else if ( (LA30_0==TAIKHU) ) {
                alt30=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("293:1: ae_opt : ( ( TONE )? A | TAIKHU c );", 30, 0, input);

                throw nvae;
            }
            switch (alt30) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:293:10: ( TONE )? A
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    // /home/arthit/projects/siit-commons/src/TCC.g:293:10: ( TONE )?
                    int alt29=2;
                    int LA29_0 = input.LA(1);

                    if ( (LA29_0==TONE) ) {
                        alt29=1;
                    }
                    switch (alt29) {
                        case 1 :
                            // /home/arthit/projects/siit-commons/src/TCC.g:293:10: TONE
                            {
                            TONE89=(Token)input.LT(1);
                            match(input,TONE,FOLLOW_TONE_in_ae_opt1770); 
                            TONE89_tree = (CommonTree)adaptor.create(TONE89);
                            adaptor.addChild(root_0, TONE89_tree);


                            }
                            break;

                    }

                    A90=(Token)input.LT(1);
                    match(input,A,FOLLOW_A_in_ae_opt1773); 
                    A90_tree = (CommonTree)adaptor.create(A90);
                    adaptor.addChild(root_0, A90_tree);


                    }
                    break;
                case 2 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:294:4: TAIKHU c
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    TAIKHU91=(Token)input.LT(1);
                    match(input,TAIKHU,FOLLOW_TAIKHU_in_ae_opt1778); 
                    TAIKHU91_tree = (CommonTree)adaptor.create(TAIKHU91);
                    adaptor.addChild(root_0, TAIKHU91_tree);

                    pushFollow(FOLLOW_c_in_ae_opt1780);
                    c92=c();
                    _fsp--;

                    adaptor.addChild(root_0, c92.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end ae_opt

    public static class o_opt_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start o_opt
    // /home/arthit/projects/siit-commons/src/TCC.g:296:1: o_opt : ( TONE )? A ;
    public final o_opt_return o_opt() throws RecognitionException {
        o_opt_return retval = new o_opt_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token TONE93=null;
        Token A94=null;

        CommonTree TONE93_tree=null;
        CommonTree A94_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:296:7: ( ( TONE )? A )
            // /home/arthit/projects/siit-commons/src/TCC.g:296:9: ( TONE )? A
            {
            root_0 = (CommonTree)adaptor.nil();

            // /home/arthit/projects/siit-commons/src/TCC.g:296:9: ( TONE )?
            int alt31=2;
            int LA31_0 = input.LA(1);

            if ( (LA31_0==TONE) ) {
                alt31=1;
            }
            switch (alt31) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:296:9: TONE
                    {
                    TONE93=(Token)input.LT(1);
                    match(input,TONE,FOLLOW_TONE_in_o_opt1789); 
                    TONE93_tree = (CommonTree)adaptor.create(TONE93);
                    adaptor.addChild(root_0, TONE93_tree);


                    }
                    break;

            }

            A94=(Token)input.LT(1);
            match(input,A,FOLLOW_A_in_o_opt1792); 
            A94_tree = (CommonTree)adaptor.create(A94);
            adaptor.addChild(root_0, A94_tree);


            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end o_opt

    public static class c_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start c
    // /home/arthit/projects/siit-commons/src/TCC.g:298:1: c : ( KAI | KHAI | KHUAT | KHWAI | KHON | RAKHANG | NGU | CHAN | CHING | CHANG | SO | CHOE | YING | CHADA | PATAK | THAN | NANGMONTHO | PHUTHAO | NEN | DEK | TAO | THUNG | THAHAN | THONG | NU | BAIMAI | PLA | PHUNG | FA | PHAN | FAN | SAMPHAO | MA | YAK | RUA | LING | WAEN | SALA | RUSI | SUA | HIP | CHULA | ANG | NOKHUK );
    public final c_return c() throws RecognitionException {
        c_return retval = new c_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token set95=null;

        CommonTree set95_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:298:3: ( KAI | KHAI | KHUAT | KHWAI | KHON | RAKHANG | NGU | CHAN | CHING | CHANG | SO | CHOE | YING | CHADA | PATAK | THAN | NANGMONTHO | PHUTHAO | NEN | DEK | TAO | THUNG | THAHAN | THONG | NU | BAIMAI | PLA | PHUNG | FA | PHAN | FAN | SAMPHAO | MA | YAK | RUA | LING | WAEN | SALA | RUSI | SUA | HIP | CHULA | ANG | NOKHUK )
            // /home/arthit/projects/siit-commons/src/TCC.g:
            {
            root_0 = (CommonTree)adaptor.nil();

            set95=(Token)input.LT(1);
            if ( (input.LA(1)>=KAI && input.LA(1)<=NOKHUK) ) {
                input.consume();
                adaptor.addChild(root_0, adaptor.create(set95));
                errorRecovery=false;
            }
            else {
                MismatchedSetException mse =
                    new MismatchedSetException(null,input);
                recoverFromMismatchedSet(input,mse,FOLLOW_set_in_c0);    throw mse;
            }


            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end c

    public static class fv_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start fv
    // /home/arthit/projects/siit-commons/src/TCC.g:308:1: fv : ( A | AA | AM | LAKKHANGYAO | NIKHAHIT AA );
    public final fv_return fv() throws RecognitionException {
        fv_return retval = new fv_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token A96=null;
        Token AA97=null;
        Token AM98=null;
        Token LAKKHANGYAO99=null;
        Token NIKHAHIT100=null;
        Token AA101=null;

        CommonTree A96_tree=null;
        CommonTree AA97_tree=null;
        CommonTree AM98_tree=null;
        CommonTree LAKKHANGYAO99_tree=null;
        CommonTree NIKHAHIT100_tree=null;
        CommonTree AA101_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:308:4: ( A | AA | AM | LAKKHANGYAO | NIKHAHIT AA )
            int alt32=5;
            switch ( input.LA(1) ) {
            case A:
                {
                alt32=1;
                }
                break;
            case AA:
                {
                alt32=2;
                }
                break;
            case AM:
                {
                alt32=3;
                }
                break;
            case LAKKHANGYAO:
                {
                alt32=4;
                }
                break;
            case NIKHAHIT:
                {
                alt32=5;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("308:1: fv : ( A | AA | AM | LAKKHANGYAO | NIKHAHIT AA );", 32, 0, input);

                throw nvae;
            }

            switch (alt32) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:308:6: A
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    A96=(Token)input.LT(1);
                    match(input,A,FOLLOW_A_in_fv1990); 
                    A96_tree = (CommonTree)adaptor.create(A96);
                    adaptor.addChild(root_0, A96_tree);


                    }
                    break;
                case 2 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:308:10: AA
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    AA97=(Token)input.LT(1);
                    match(input,AA,FOLLOW_AA_in_fv1994); 
                    AA97_tree = (CommonTree)adaptor.create(AA97);
                    adaptor.addChild(root_0, AA97_tree);


                    }
                    break;
                case 3 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:308:15: AM
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    AM98=(Token)input.LT(1);
                    match(input,AM,FOLLOW_AM_in_fv1998); 
                    AM98_tree = (CommonTree)adaptor.create(AM98);
                    adaptor.addChild(root_0, AM98_tree);


                    }
                    break;
                case 4 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:309:4: LAKKHANGYAO
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    LAKKHANGYAO99=(Token)input.LT(1);
                    match(input,LAKKHANGYAO,FOLLOW_LAKKHANGYAO_in_fv2003); 
                    LAKKHANGYAO99_tree = (CommonTree)adaptor.create(LAKKHANGYAO99);
                    adaptor.addChild(root_0, LAKKHANGYAO99_tree);


                    }
                    break;
                case 5 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:310:4: NIKHAHIT AA
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    NIKHAHIT100=(Token)input.LT(1);
                    match(input,NIKHAHIT,FOLLOW_NIKHAHIT_in_fv2008); 
                    NIKHAHIT100_tree = (CommonTree)adaptor.create(NIKHAHIT100);
                    adaptor.addChild(root_0, NIKHAHIT100_tree);

                    AA101=(Token)input.LT(1);
                    match(input,AA,FOLLOW_AA_in_fv2010); 
                    AA101_tree = (CommonTree)adaptor.create(AA101);
                    adaptor.addChild(root_0, AA101_tree);


                    }
                    break;

            }
            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end fv

    public static class lv_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start lv
    // /home/arthit/projects/siit-commons/src/TCC.g:312:1: lv : ( E | AE | O | MUAN | MALAI );
    public final lv_return lv() throws RecognitionException {
        lv_return retval = new lv_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token set102=null;

        CommonTree set102_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:312:4: ( E | AE | O | MUAN | MALAI )
            // /home/arthit/projects/siit-commons/src/TCC.g:
            {
            root_0 = (CommonTree)adaptor.nil();

            set102=(Token)input.LT(1);
            if ( (input.LA(1)>=E && input.LA(1)<=MALAI) ) {
                input.consume();
                adaptor.addChild(root_0, adaptor.create(set102));
                errorRecovery=false;
            }
            else {
                MismatchedSetException mse =
                    new MismatchedSetException(null,input);
                recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lv0);    throw mse;
            }


            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end lv

    public static class abv_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start abv
    // /home/arthit/projects/siit-commons/src/TCC.g:314:1: abv : ( I | II | UE | UEE | U | UU | TAIKHU | NIKHAHIT | PHINTHU );
    public final abv_return abv() throws RecognitionException {
        abv_return retval = new abv_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token set103=null;

        CommonTree set103_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:314:5: ( I | II | UE | UEE | U | UU | TAIKHU | NIKHAHIT | PHINTHU )
            // /home/arthit/projects/siit-commons/src/TCC.g:
            {
            root_0 = (CommonTree)adaptor.nil();

            set103=(Token)input.LT(1);
            if ( (input.LA(1)>=I && input.LA(1)<=UU)||input.LA(1)==PHINTHU||input.LA(1)==TAIKHU||input.LA(1)==NIKHAHIT ) {
                input.consume();
                adaptor.addChild(root_0, adaptor.create(set103));
                errorRecovery=false;
            }
            else {
                MismatchedSetException mse =
                    new MismatchedSetException(null,input);
                recoverFromMismatchedSet(input,mse,FOLLOW_set_in_abv0);    throw mse;
            }


            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end abv

    public static class sv_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start sv
    // /home/arthit/projects/siit-commons/src/TCC.g:316:1: sv : ( RU | LU ) ( LAKKHANGYAO )? ;
    public final sv_return sv() throws RecognitionException {
        sv_return retval = new sv_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token set104=null;
        Token LAKKHANGYAO105=null;

        CommonTree set104_tree=null;
        CommonTree LAKKHANGYAO105_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:316:4: ( ( RU | LU ) ( LAKKHANGYAO )? )
            // /home/arthit/projects/siit-commons/src/TCC.g:316:6: ( RU | LU ) ( LAKKHANGYAO )?
            {
            root_0 = (CommonTree)adaptor.nil();

            set104=(Token)input.LT(1);
            if ( (input.LA(1)>=RU && input.LA(1)<=LU) ) {
                input.consume();
                adaptor.addChild(root_0, adaptor.create(set104));
                errorRecovery=false;
            }
            else {
                MismatchedSetException mse =
                    new MismatchedSetException(null,input);
                recoverFromMismatchedSet(input,mse,FOLLOW_set_in_sv2087);    throw mse;
            }

            // /home/arthit/projects/siit-commons/src/TCC.g:316:16: ( LAKKHANGYAO )?
            int alt33=2;
            int LA33_0 = input.LA(1);

            if ( (LA33_0==LAKKHANGYAO) ) {
                alt33=1;
            }
            switch (alt33) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:316:16: LAKKHANGYAO
                    {
                    LAKKHANGYAO105=(Token)input.LT(1);
                    match(input,LAKKHANGYAO,FOLLOW_LAKKHANGYAO_in_sv2095); 
                    LAKKHANGYAO105_tree = (CommonTree)adaptor.create(LAKKHANGYAO105);
                    adaptor.addChild(root_0, LAKKHANGYAO105_tree);


                    }
                    break;

            }


            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end sv

    public static class kill_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start kill
    // /home/arthit/projects/siit-commons/src/TCC.g:318:1: kill : ( THANTHAKHAT | YAMAKKAN );
    public final kill_return kill() throws RecognitionException {
        kill_return retval = new kill_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token set106=null;

        CommonTree set106_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:318:6: ( THANTHAKHAT | YAMAKKAN )
            // /home/arthit/projects/siit-commons/src/TCC.g:
            {
            root_0 = (CommonTree)adaptor.nil();

            set106=(Token)input.LT(1);
            if ( input.LA(1)==THANTHAKHAT||input.LA(1)==YAMAKKAN ) {
                input.consume();
                adaptor.addChild(root_0, adaptor.create(set106));
                errorRecovery=false;
            }
            else {
                MismatchedSetException mse =
                    new MismatchedSetException(null,input);
                recoverFromMismatchedSet(input,mse,FOLLOW_set_in_kill0);    throw mse;
            }


            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end kill

    public static class paiyanyai_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start paiyanyai
    // /home/arthit/projects/siit-commons/src/TCC.g:321:1: paiyanyai : PAIYANNOI LING PAIYANNOI ;
    public final paiyanyai_return paiyanyai() throws RecognitionException {
        paiyanyai_return retval = new paiyanyai_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token PAIYANNOI107=null;
        Token LING108=null;
        Token PAIYANNOI109=null;

        CommonTree PAIYANNOI107_tree=null;
        CommonTree LING108_tree=null;
        CommonTree PAIYANNOI109_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:321:11: ( PAIYANNOI LING PAIYANNOI )
            // /home/arthit/projects/siit-commons/src/TCC.g:321:13: PAIYANNOI LING PAIYANNOI
            {
            root_0 = (CommonTree)adaptor.nil();

            PAIYANNOI107=(Token)input.LT(1);
            match(input,PAIYANNOI,FOLLOW_PAIYANNOI_in_paiyanyai2119); 
            PAIYANNOI107_tree = (CommonTree)adaptor.create(PAIYANNOI107);
            adaptor.addChild(root_0, PAIYANNOI107_tree);

            LING108=(Token)input.LT(1);
            match(input,LING,FOLLOW_LING_in_paiyanyai2121); 
            LING108_tree = (CommonTree)adaptor.create(LING108);
            adaptor.addChild(root_0, LING108_tree);

            PAIYANNOI109=(Token)input.LT(1);
            match(input,PAIYANNOI,FOLLOW_PAIYANNOI_in_paiyanyai2123); 
            PAIYANNOI109_tree = (CommonTree)adaptor.create(PAIYANNOI109);
            adaptor.addChild(root_0, PAIYANNOI109_tree);


            }

            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end paiyanyai

    public static class tsymbol_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start tsymbol
    // /home/arthit/projects/siit-commons/src/TCC.g:323:1: tsymbol : ( FONGMAN | ANGKHANKHU | KHOMUT | paiyanyai | PAIYANNOI | YAMOK );
    public final tsymbol_return tsymbol() throws RecognitionException {
        tsymbol_return retval = new tsymbol_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token FONGMAN110=null;
        Token ANGKHANKHU111=null;
        Token KHOMUT112=null;
        Token PAIYANNOI114=null;
        Token YAMOK115=null;
        paiyanyai_return paiyanyai113 = null;


        CommonTree FONGMAN110_tree=null;
        CommonTree ANGKHANKHU111_tree=null;
        CommonTree KHOMUT112_tree=null;
        CommonTree PAIYANNOI114_tree=null;
        CommonTree YAMOK115_tree=null;

        try {
            // /home/arthit/projects/siit-commons/src/TCC.g:323:9: ( FONGMAN | ANGKHANKHU | KHOMUT | paiyanyai | PAIYANNOI | YAMOK )
            int alt34=6;
            switch ( input.LA(1) ) {
            case FONGMAN:
                {
                alt34=1;
                }
                break;
            case ANGKHANKHU:
                {
                alt34=2;
                }
                break;
            case KHOMUT:
                {
                alt34=3;
                }
                break;
            case PAIYANNOI:
                {
                int LA34_4 = input.LA(2);

                if ( (LA34_4==LING) ) {
                    int LA34_6 = input.LA(3);

                    if ( (LA34_6==PAIYANNOI) ) {
                        alt34=4;
                    }
                    else if ( (LA34_6==EOF||(LA34_6>=ADIGIT && LA34_6<=SYMBOL)||LA34_6==WS||(LA34_6>=NONTHAI && LA34_6<=LU)||(LA34_6>=PHINTHU && LA34_6<=NOKHUK)) ) {
                        alt34=5;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("323:1: tsymbol : ( FONGMAN | ANGKHANKHU | KHOMUT | paiyanyai | PAIYANNOI | YAMOK );", 34, 6, input);

                        throw nvae;
                    }
                }
                else if ( (LA34_4==EOF||(LA34_4>=ADIGIT && LA34_4<=SYMBOL)||LA34_4==WS||LA34_4==NONTHAI||(LA34_4>=A && LA34_4<=RUA)||(LA34_4>=WAEN && LA34_4<=NOKHUK)) ) {
                    alt34=5;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("323:1: tsymbol : ( FONGMAN | ANGKHANKHU | KHOMUT | paiyanyai | PAIYANNOI | YAMOK );", 34, 4, input);

                    throw nvae;
                }
                }
                break;
            case YAMOK:
                {
                alt34=6;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("323:1: tsymbol : ( FONGMAN | ANGKHANKHU | KHOMUT | paiyanyai | PAIYANNOI | YAMOK );", 34, 0, input);

                throw nvae;
            }

            switch (alt34) {
                case 1 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:323:11: FONGMAN
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    FONGMAN110=(Token)input.LT(1);
                    match(input,FONGMAN,FOLLOW_FONGMAN_in_tsymbol2132); 
                    FONGMAN110_tree = (CommonTree)adaptor.create(FONGMAN110);
                    adaptor.addChild(root_0, FONGMAN110_tree);


                    }
                    break;
                case 2 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:324:4: ANGKHANKHU
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    ANGKHANKHU111=(Token)input.LT(1);
                    match(input,ANGKHANKHU,FOLLOW_ANGKHANKHU_in_tsymbol2137); 
                    ANGKHANKHU111_tree = (CommonTree)adaptor.create(ANGKHANKHU111);
                    adaptor.addChild(root_0, ANGKHANKHU111_tree);


                    }
                    break;
                case 3 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:325:4: KHOMUT
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    KHOMUT112=(Token)input.LT(1);
                    match(input,KHOMUT,FOLLOW_KHOMUT_in_tsymbol2142); 
                    KHOMUT112_tree = (CommonTree)adaptor.create(KHOMUT112);
                    adaptor.addChild(root_0, KHOMUT112_tree);


                    }
                    break;
                case 4 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:326:4: paiyanyai
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_paiyanyai_in_tsymbol2147);
                    paiyanyai113=paiyanyai();
                    _fsp--;

                    adaptor.addChild(root_0, paiyanyai113.getTree());

                    }
                    break;
                case 5 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:327:4: PAIYANNOI
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    PAIYANNOI114=(Token)input.LT(1);
                    match(input,PAIYANNOI,FOLLOW_PAIYANNOI_in_tsymbol2152); 
                    PAIYANNOI114_tree = (CommonTree)adaptor.create(PAIYANNOI114);
                    adaptor.addChild(root_0, PAIYANNOI114_tree);


                    }
                    break;
                case 6 :
                    // /home/arthit/projects/siit-commons/src/TCC.g:328:4: YAMOK
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    YAMOK115=(Token)input.LT(1);
                    match(input,YAMOK,FOLLOW_YAMOK_in_tsymbol2157); 
                    YAMOK115_tree = (CommonTree)adaptor.create(YAMOK115);
                    adaptor.addChild(root_0, YAMOK115_tree);


                    }
                    break;

            }
            retval.stop = input.LT(-1);

                retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end tsymbol


 

    public static final BitSet FOLLOW_tcc_in_s1048 = new BitSet(new long[]{0xFFFFFFFFFE827002L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_abtcc_in_s1052 = new BitSet(new long[]{0xFFFFFFFFFE827002L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_others_in_s1056 = new BitSet(new long[]{0xFFFFFFFFFE827002L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_symbols_in_s1060 = new BitSet(new long[]{0xFFFFFFFFFE827002L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_adigits_in_s1064 = new BitSet(new long[]{0xFFFFFFFFFE827002L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_tdigits_in_s1068 = new BitSet(new long[]{0xFFFFFFFFFE827002L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_whitespaces_in_s1072 = new BitSet(new long[]{0xFFFFFFFFFE827002L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_NONTHAI_in_others1085 = new BitSet(new long[]{0x0000000000800002L});
    public static final BitSet FOLLOW_SYMBOL_in_symbols1104 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ADIGIT_in_adigits1121 = new BitSet(new long[]{0x0000000000001002L});
    public static final BitSet FOLLOW_TDIGIT_in_tdigits1140 = new BitSet(new long[]{0x0000000000002002L});
    public static final BitSet FOLLOW_WS_in_whitespaces1159 = new BitSet(new long[]{0x0000000000020002L});
    public static final BitSet FOLLOW_c_in_tcc1185 = new BitSet(new long[]{0x0003D007E0000000L});
    public static final BitSet FOLLOW_abv_in_tcc1187 = new BitSet(new long[]{0x0002800000000000L});
    public static final BitSet FOLLOW_kill_in_tcc1190 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_c_in_tcc1212 = new BitSet(new long[]{0x00015007E0000000L});
    public static final BitSet FOLLOW_abv_in_tcc1214 = new BitSet(new long[]{0x0000000001000002L});
    public static final BitSet FOLLOW_TONE_in_tcc1216 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_c_in_tcc1239 = new BitSet(new long[]{0x0000060000000000L});
    public static final BitSet FOLLOW_sv_in_tcc1241 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_c_in_tcc1260 = new BitSet(new long[]{0x0000400000000000L});
    public static final BitSet FOLLOW_TAIKHU_in_tcc1262 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_c_in_tcc1281 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_hanakat_c_in_tcc1283 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_c_in_tcc1303 = new BitSet(new long[]{0x000101001B000002L});
    public static final BitSet FOLLOW_TONE_in_tcc1305 = new BitSet(new long[]{0x000101001A000002L});
    public static final BitSet FOLLOW_fv_in_tcc1308 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_E_in_tcc1332 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_tcc1334 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_I_in_tcc1336 = new BitSet(new long[]{0xFFE0000001000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_e_i_opt_in_tcc1338 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_E_in_tcc1361 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_tcc1363 = new BitSet(new long[]{0x0000000040000000L});
    public static final BitSet FOLLOW_II_in_tcc1365 = new BitSet(new long[]{0x0000000001000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_e_ii_opt_in_tcc1367 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_E_in_tcc1390 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_tcc1392 = new BitSet(new long[]{0x0000000100000000L});
    public static final BitSet FOLLOW_UEE_in_tcc1394 = new BitSet(new long[]{0x0000000001000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_e_uee_opt_in_tcc1396 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_E_in_tcc1419 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_tcc1421 = new BitSet(new long[]{0xFFE040000B000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_e_opt_in_tcc1423 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_AE_in_tcc1444 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_tcc1446 = new BitSet(new long[]{0x0000400003000000L});
    public static final BitSet FOLLOW_ae_opt_in_tcc1448 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_O_in_tcc1469 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_tcc1471 = new BitSet(new long[]{0x0000000003000000L});
    public static final BitSet FOLLOW_o_opt_in_tcc1473 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_lv_in_tcc1494 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_tcc1496 = new BitSet(new long[]{0x0000000001000002L});
    public static final BitSet FOLLOW_TONE_in_tcc1498 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_sv_in_tcc1521 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_tsymbol_in_tcc1538 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_fv_in_abtcc1560 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_lv_in_abtcc1573 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_abv_in_abtcc1586 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_hanakat_c_in_abtcc1599 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_kill_in_abtcc1612 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_HANAKAT_in_hanakat_c1633 = new BitSet(new long[]{0xFFE0000001000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_TONE_in_hanakat_c1635 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_hanakat_c1638 = new BitSet(new long[]{0x0000000222000002L});
    public static final BitSet FOLLOW_set_in_hanakat_c1640 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_HANAKAT_in_hanakat_c1656 = new BitSet(new long[]{0xFFE0000001000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_TONE_in_hanakat_c1658 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_hanakat_c1661 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_HANAKAT_in_hanakat_c1666 = new BitSet(new long[]{0x0000000001000002L});
    public static final BitSet FOLLOW_TONE_in_hanakat_c1668 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_c_in_e_opt1678 = new BitSet(new long[]{0x0000000009000000L});
    public static final BitSet FOLLOW_TONE_in_e_opt1680 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_AA_in_e_opt1683 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_A_in_e_opt1685 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TONE_in_e_opt1690 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_AA_in_e_opt1693 = new BitSet(new long[]{0x0000000002000002L});
    public static final BitSet FOLLOW_A_in_e_opt1695 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TONE_in_e_opt1701 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_A_in_e_opt1704 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TAIKHU_in_e_opt1709 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_e_opt1711 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TONE_in_e_i_opt1720 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_e_i_opt1724 = new BitSet(new long[]{0x0002800000000000L});
    public static final BitSet FOLLOW_kill_in_e_i_opt1726 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_e_i_opt1730 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TONE_in_e_ii_opt1739 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_YAK_in_e_ii_opt1742 = new BitSet(new long[]{0x0000000002000002L});
    public static final BitSet FOLLOW_A_in_e_ii_opt1744 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TONE_in_e_uee_opt1755 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_ANG_in_e_uee_opt1758 = new BitSet(new long[]{0x0000000002000002L});
    public static final BitSet FOLLOW_A_in_e_uee_opt1760 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TONE_in_ae_opt1770 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_A_in_ae_opt1773 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TAIKHU_in_ae_opt1778 = new BitSet(new long[]{0xFFE0000000000000L,0x00000001FFFFFFFFL});
    public static final BitSet FOLLOW_c_in_ae_opt1780 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TONE_in_o_opt1789 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_A_in_o_opt1792 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_c0 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_A_in_fv1990 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_AA_in_fv1994 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_AM_in_fv1998 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LAKKHANGYAO_in_fv2003 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NIKHAHIT_in_fv2008 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_AA_in_fv2010 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_lv0 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_abv0 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_sv2087 = new BitSet(new long[]{0x0000010000000002L});
    public static final BitSet FOLLOW_LAKKHANGYAO_in_sv2095 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_kill0 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PAIYANNOI_in_paiyanyai2119 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
    public static final BitSet FOLLOW_LING_in_paiyanyai2121 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_PAIYANNOI_in_paiyanyai2123 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FONGMAN_in_tsymbol2132 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ANGKHANKHU_in_tsymbol2137 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_KHOMUT_in_tsymbol2142 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_paiyanyai_in_tsymbol2147 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PAIYANNOI_in_tsymbol2152 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_YAMOK_in_tsymbol2157 = new BitSet(new long[]{0x0000000000000002L});

}